為了開發上的方便,本文中示範如何擴展 CommandField 類別,透過屬性就可以輕易設定刪除提示訊息。首先繼承 CommandField 下來命名為 TBCommandField,新增一個 DeleteConfirmMessage 屬性,用來設定刪除提示訊息;覆寫 InitializeCell 方法,找到按鈕並設定刪除提示訊息。
TBCommandField 類別完整的程式碼如下
1
Imports
System
2 Imports System.Collections.Generic
3 Imports System.ComponentModel
4 Imports System.Text
5 Imports System.Web
6 Imports System.Web.UI
7 Imports System.Web.UI.WebControls
8
9
10 Public Class TBCommandField
11 Inherits CommandField
12
13 Private FDeleteConfirmMessage As String = String .Empty
14
15 ' '' <summary>
16 ' '' 刪除詢問訊息。
17 ' '' </summary>
18 Public Property DeleteConfirmMessage() As String
19 Get
20 Return FDeleteConfirmMessage
21 End Get
22 Set ( ByVal value As String )
23 FDeleteConfirmMessage = value
24 End Set
25 End Property
26
27 ' '' <summary>
28 ' '' 初始化儲存格。
29 ' '' </summary>
30 ' '' <param name="cell">儲存格。</param>
31 ' '' <param name="cellType"></param>
32 ' '' <param name="rowState"></param>
33 ' '' <param name="rowIndex"></param>
34 ' '' <remarks></remarks>
35 Public Overrides Sub InitializeCell( ByVal cell As DataControlFieldCell, ByVal cellType As DataControlCellType,
ByVal rowState As DataControlRowState, ByVal rowIndex As Integer )
36 MyBase .InitializeCell(cell, cellType, rowState, rowIndex)
37 If Me .ShowDeleteButton AndAlso Me .Visible AndAlso Me .DeleteConfirmMessage <> String .Empty Then
38 SetButtonDeleteConfirm(cell)
39 End If
40 End Sub
41
42 ' '' <summary>
43 ' '' 設定刪除鈕的刪除訊息。
44 ' '' </summary>
45 ' '' <param name="Cell">儲存格。</param>
46 Private Sub SetButtonDeleteConfirm( ByVal Cell As DataControlFieldCell)
47 Dim oControl As Control
48 Dim sScript As String
49
50 sScript = " if (confirm(' " & Me .DeleteConfirmMessage & " ')==false) {return false;} "
51
52 For Each oControl In Cell.Controls
53 If TypeOf (oControl) Is IButtonControl Then
54 If DirectCast (oControl, IButtonControl).CommandName = " Delete " Then
55 DirectCast (oControl, WebControl).Attributes( " onclick " ) = sScript
56 Exit Sub
57 End If
58 End If
59 Next
60 End Sub
61 End Class
62
2 Imports System.Collections.Generic
3 Imports System.ComponentModel
4 Imports System.Text
5 Imports System.Web
6 Imports System.Web.UI
7 Imports System.Web.UI.WebControls
8
9
10 Public Class TBCommandField
11 Inherits CommandField
12
13 Private FDeleteConfirmMessage As String = String .Empty
14
15 ' '' <summary>
16 ' '' 刪除詢問訊息。
17 ' '' </summary>
18 Public Property DeleteConfirmMessage() As String
19 Get
20 Return FDeleteConfirmMessage
21 End Get
22 Set ( ByVal value As String )
23 FDeleteConfirmMessage = value
24 End Set
25 End Property
26
27 ' '' <summary>
28 ' '' 初始化儲存格。
29 ' '' </summary>
30 ' '' <param name="cell">儲存格。</param>
31 ' '' <param name="cellType"></param>
32 ' '' <param name="rowState"></param>
33 ' '' <param name="rowIndex"></param>
34 ' '' <remarks></remarks>
35 Public Overrides Sub InitializeCell( ByVal cell As DataControlFieldCell, ByVal cellType As DataControlCellType,
ByVal rowState As DataControlRowState, ByVal rowIndex As Integer )
36 MyBase .InitializeCell(cell, cellType, rowState, rowIndex)
37 If Me .ShowDeleteButton AndAlso Me .Visible AndAlso Me .DeleteConfirmMessage <> String .Empty Then
38 SetButtonDeleteConfirm(cell)
39 End If
40 End Sub
41
42 ' '' <summary>
43 ' '' 設定刪除鈕的刪除訊息。
44 ' '' </summary>
45 ' '' <param name="Cell">儲存格。</param>
46 Private Sub SetButtonDeleteConfirm( ByVal Cell As DataControlFieldCell)
47 Dim oControl As Control
48 Dim sScript As String
49
50 sScript = " if (confirm(' " & Me .DeleteConfirmMessage & " ')==false) {return false;} "
51
52 For Each oControl In Cell.Controls
53 If TypeOf (oControl) Is IButtonControl Then
54 If DirectCast (oControl, IButtonControl).CommandName = " Delete " Then
55 DirectCast (oControl, WebControl).Attributes( " onclick " ) = sScript
56 Exit Sub
57 End If
58 End If
59 Next
60 End Sub
61 End Class
62
上述程式碼中,是由 SetButtonDeleteConfirm 方法來設定刪除鈕的提示訊息。CommandField 的 ButtonType 可以為 Button、Link、Image 三者之一,依設定不同分別產生的命令鈕為 Button、LinkButton 或 ImageButton 三者之一,不過它們都具有 IButtonControl 介面,所以直接判斷 IButtonControl.CommandName 是否為 "Delete" 來判斷是否為刪除鈕,若是的話就直接設定其 Attributes( " onclick " ) 加入刪除提示訊息。
使用 TBCommandField 的方式與 CommandField 相同,然後直接 aspx 程式碼中設定其 DeleteConfirmMessage 屬性就可以加入刪除提示訊息。
<
bee:TBCommandField
ShowDeleteButton
="True"
ShowEditButton
="True"
DeleteConfirmMessage
="確定刪除嗎?"
ButtonType
="Button"
/>