[GridView]GridRow上DoubleClick觸發特定事件
通常設計GridVeiw的時候,每一列上面可能會有修改或刪除的按鈕,
有可能使用RowCommand或是觸發對應的RowEditing或RowDeleting事件。
但是要更friendly一點,通常會希望在某一列doubleclick時,可以觸發特定的事件,
例如在該列double click,即可修改該列內容、導到對應的頁面、甚至跳出confirm視窗是否要刪除此筆資料等...
這邊透過註冊postback以及在onLoad()的時候去攔截,並觸發對應事件或自訂事件。
首先在RowDataBound()裡面針對每一列datarow註冊doubleclick,並將該筆rowindex記錄在postback的資訊中。
Protected Overrides Sub OnRowDataBound(ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.Attributes.Add("ondblclick", e.Row.Page.ClientScript.GetPostBackClientHyperlink(Me, e.Row.UniqueID & "$Row" & e.Row.RowIndex))
End If
MyBase.OnRowDataBound(e)
End Sub
接著在Grid的Load()裡面,去攔截該postback,並觸發特定事件。
Dim a As String = Me.Page.Request.Form("__EVENTTARGET")
Dim c As String = Me.Page.Request.Form("__EVENTARGUMENT")
If a IsNot Nothing Then
If a = Me.UniqueID AndAlso c.IndexOf("$Row") >= 0 Then
Dim b As String() = c.Split("$")
Me.RowEditIndex = CInt(b(b.Length - 1).Replace("Row", ""))
Dim eEditEvent As GridViewEditEventArgs = New GridViewEditEventArgs(Me.RowEditIndex)
Call MyBase.OnRowEditing(eEditEvent)
End If
End If
以這例子,就是double click的時候,會觸發OnRowEditing的事件,且e.RowEditIndex為選到的那一筆index。
若要觸發其他自訂事件,可以自行使用Raise Event。
blog 與課程更新內容,請前往新站位置:http://tdd.best/