◎以上程式範例AspNet46.aspx,如在頁框下不能操作,請開新視窗操作
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load '本範例改寫自MSDN 'GridView.PageIndexChanging 事件 'http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.pageindexchanging(v=vs.100).aspx 'GridView.PageIndexChanged 事件 'http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.pageindexchanged 'GridView.PageCount 屬性 'http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.gridview.pagecount(v=vs.100).aspx ' 底下有設置JavaScript,若不清空 label1裡的文字,按下取消時(頁面重整一次),又會跳出alert視窗 Me.Label1.Text = "" End Sub Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged ' 底下示範的只是換頁的呈現模式有哪些 Select Case Me.DropDownList1.SelectedValue Case "上一頁下一頁" Me.GridView1.PagerSettings.Mode = PagerButtons.NextPrevious Case "首頁上一頁下一頁末頁" Me.GridView1.PagerSettings.Mode = PagerButtons.NextPreviousFirstLast Case "數字分頁" Me.GridView1.PagerSettings.Mode = PagerButtons.Numeric Case "首頁數字分頁末頁" Me.GridView1.PagerSettings.Mode = PagerButtons.NumericFirstLast Case Else End Select End Sub Protected Sub GridView1_PageIndexChanging(sender As Object, e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging ' 如果GridView的有開啟編輯狀態的話 (也就是有編輯列的索引值) ' 沒有索引值的話,就是-1,其他的索引都>=0 If Me.GridView1.EditIndex <> -1 Then ' 這邊的e是指GridViewPageEventArgs,參數裡的cancel意思就是取消換頁 e.Cancel = True ' 用label可以帶html碼的特性,偷渡一個JavaScript的警告視窗 Me.Label1.Text = "<script type='text/javascript'>alert('請取消編輯模式再切換到第" & e.NewPageIndex + 1 & "頁')</script>" End If End Sub Protected Sub GridView1_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating Me.Label1.Text = "<script type='text/javascript'>alert('抱歉,demo網頁,不能讓您更新資料')</script>" ' 這邊的e是指GridViewUpdateEventArgs,參數資料中的cancel意思就是取消編輯 ' 因為是demo範例,所以把編輯功能給關掉 e.Cancel = True Me.GridView1.EditIndex = -1 End Sub Protected Sub GridView1_DataBound(sender As Object, e As System.EventArgs) Handles GridView1.DataBound '每次GridView的資料繫結完畢後,頁面重整的影響下,DropDownList也被迫重新做一次的for迴圈… '所以每次GridView DataBind 結束,先把DropDownList這個容器裡的子項目給全部清除 '不清除會有二個後果 1、子項目會愈來愈多(每次重整頁面,就會再加一次迴圈內的項目) ' 2、底下有設定預設選取,下一次換頁就會出現錯誤訊息「不可以在 DropDownList 中選取多個項目」 Me.DropDownList2.Items.Clear() '下面是在產生DropDownList上的頁數 'PageCount是在GridView資料綁定後才可以算得出來的,所以寫在GridView1.DataBound事件中 For i As Integer = 1 To CInt(Me.GridView1.PageCount.ToString) Dim item As New ListItem(i) '如果i=目前的頁面索引+1 If i = Me.GridView1.PageIndex + 1 Then 'Listitem(i) 就被選取 item.Selected = True End If Me.DropDownList2.Items.Add(item) Next End Sub Protected Sub DropDownList2_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DropDownList2.SelectedIndexChanged ' 設定依照下拉選單的頁數來換頁 ' 例如當DropDownList下拉第3頁時,索引值是2 ' 那GridView的換頁索引=2,也就是第3頁 ' 這邊也是要避免編輯模式下換頁設計了if判斷句 If Me.GridView1.EditIndex <> -1 Then Me.Label1.Text = "<script type='text/javascript'>alert('請取消編輯模式再切換到第" & Me.DropDownList2.SelectedIndex + 1 & "頁')</script>" Me.DropDownList2.SelectedIndex = Me.GridView1.PageIndex Else Me.GridView1.PageIndex = Me.DropDownList2.SelectedIndex End If End Sub
程式的內容說明大致上都補充到程式碼上頭了。
重點是「e 參數在每個事件中所參用的資料是不同的」
還有「要了解事件引發的順序」
如果有要研究的話,在下面二篇文章都有補充,請參考
自行撰寫GridView的RowCommand處理常式
GridView和分頁(paging)有關的事件
It’s my life live love …
異想天開幫4歲的女兒、6歲的兒子買海賊王的300片拼圖,搞沒二下就變成大人在拼,後來還是買20片、40片的給他們玩了…
沒有留言:
張貼留言