在啟用GridView的編輯功能,如果也同時使用排序功能,當進入編輯模式底下,同時又換頁的話,那麼編輯的資料欄位就會跟著改變,之前對某列的修改資料就會消失,透過手動撰寫GridView的sorting事件可以不讓使用者在編輯模式下使用排序功能。另外也使用sorting的二個重要參數(SortExpression 和 SortDirection)提供排序資訊。
◎以上程式範例AspNet47.aspx,如在頁框下不能操作,請開新視窗操作
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load Me.Label1.Text = "" Me.Label2.Text = "" End Sub Protected Sub GridView1_Sorting(sender As Object, e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles GridView1.Sorting If e.SortExpression = "class" Then e.Cancel = True Me.Label1.Text = "你沒有權限對" & e.SortExpression & "排序。" End If If Me.GridView1.EditIndex <> -1 Then e.Cancel = True Me.Label1.Text = "你尚在編輯模式,無法對" & e.SortExpression & "排序。" End If End Sub Protected Sub GridView1_Sorted(sender As Object, e As System.EventArgs) Handles GridView1.Sorted Me.Label2.Text = "目前已對" & Me.GridView1.SortExpression.ToString & "排序(" & Me.GridView1.SortDirection.ToString & ")" End Sub Protected Sub GridView1_RowEditing(sender As Object, e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing If Me.GridView1.SortExpression <> Nothing Then Me.Label2.Text = "目前已對" & Me.GridView1.SortExpression.ToString & "排序(" & Me.GridView1.SortDirection.ToString & ")" End If End Sub Protected Sub GridView1_RowUpdating(sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating e.Cancel = True Me.GridView1.EditIndex = -1 End Sub
這篇文章的和分頁的事件寫法很像,請參考
GridView和分頁(paging)有關的事件
一樣的觀念,就是不會的就去狂 k 猛嗑MSDN就對了
熟悉基本事件後,像這次的程式碼都是訓練自已的logic
有人對事件的概念清楚,對函數瞭若指掌
寫起來的程式碼就是比較有學問一點(不一定是簡潔有力喔)
像MSDN的內容,一開始我會覺得每個範例都寫得落落長
然後以為自已可以縮短,以為簡潔有力就很猛
慢慢的體會到MSDN裡的程式有學問的是「通用性」很強
就是直接套用到某個網頁,要修改的地方很少
就算是用換到某種語言,要轉換的通常也只是語法
有關GridView的排序問題,數字排序問題,為什麼1,10,3三個數字排序出來為1,10,3;而不是1,3,10呢?
這是資料表設計的問題,id是int類型、description是sting類型…
所以排序當然是這樣。
不過你看底下的排序,就算是字串也沒有發生「編號11」錯排的問題
喔,因為只是在DataFormatString上使用編號{0},把原來的id前加字串「編號」而已,排序的時候還是只看原來的資料 {0}
沒有留言:
張貼留言