GridView 中 CommandField 的刪除鈕預設是沒有刪除提示訊息,一般的作法是在 GridView 的 RowDataBound 事件中找到 CommandField 中的按鈕來設定它的刪除訊息。這種方式雖然可以達到需求,不過每次使用時都要自己增加程式碼是個麻煩的動作。

為了開發上的方便,本文中示範如何擴展 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 

上述程式碼中,是由 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" />



posted on 2007-12-14 02:38  jeff377  阅读(1966)  评论(8编辑  收藏  举报