◎以上程式範例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片的給他們玩了…
沒有留言:
張貼留言