如何自定义自动生成的命令按钮,例如Delete
?
我想在删除时添加客户端确认,同时我想在设置AutoGenerateDeleteButton="true"
时生成此按钮。有可能??
我可以这样添加自定义按钮:
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton runat="server" CommandName="Delete" OnClientClick="return confirm('Delete?')">Delete</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
但它不会自动本地化,也不会在设置AutoGenerateDeleteButton="true"
时生成!
答案 0 :(得分:2)
我宁愿建议使用RowDataBound事件而不是PreRender事件。
在那里,您可以轻松访问特定行中的元素。 (我认为Kelsey发布的解决方案可能存在分页问题(可能只是与ajax结合使用))
为Linkbutton提供一个ID和subribe到RowDataBound事件。
void gv_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton _foo = e.Row.FindControl("LINKBUTTONID") as LinkButton;
if(_foo != null)
{
_foo.OnClientClick = "insert localized text here";
}
}
}
答案 1 :(得分:0)
您可以通过为网格实施PreRender
事件来实现。
这是一些基本的伪代码:
protected void yourGrid_PreRender(object sender, EventArgs e)
{
GridView grd = (GridView)(sender);
// iterate through all your rows and look for the button
// make sure to add code to verify your rows, columns, and control bounds are valid
for (int rowIndex = 0; rowIndex < grd.Rows.Count; rowIndex++)
{
LinkButton btn = grd.Rows[rowIndex].Cells[deleteButtonColumnIndex].Controls[0] as LinkButton;
// Here you have access to the button so change it to do what you need.
btn.OnClientClick = string.Format("return confirm('{0}?')", btn.Text);
}
}
此外,如果你想要它,你可能需要扩展GridView并实现自己的代码。请参阅以下主题:
答案 2 :(得分:0)
首先,您需要通过右键单击Solutions Explorer选项卡中的根文件来创建.vb文件/类(我使用VWD)。选择Add New,然后选择Class页面。它将提供创建App_Code文件夹,这是您的共享类所在的位置。将文件/类命名为“DeleteButtonField.vb”,然后单击“确定”。
然后应该打开一个名为DeleteButtonField的新.vb文件,您可以复制并粘贴或输入以下代码。 (注意,您可以使用Intellisense完成定义受保护的覆盖Sub InitializeCell(........)的真正长代码。)
Imports Microsoft.VisualBasic
Imports System
Imports System.Web.UI.WebControls
Namespace myControls
Public Class DeleteButtonField
Inherits ButtonField
Private _confirmText As String = "Delete This Record?"
Public Property ConfirmText() As String
Get
Return _confirmText
End Get
Set(ByVal value As String)
_confirmText = value
End Set
End Property
Public Sub New()
Me.CommandName = "Delete"
Me.Text = "Delete"
End Sub
Public Overrides Sub InitializeCell(ByVal cell As System.Web.UI.WebControls.DataControlFieldCell, ByVal cellType As System.Web.UI.WebControl.DataControlCellType, ByVal rowState As System.Web.UI.WebControl.DataControlRowState, ByVal rowIndex As Integer)
MyBase.InitializeCell(cell, cellType, rowState, rowIndex)
If cellType = DataControlCellType.DataCell Then
Dim button As WebControl = CType(cell.Controls(0), WebControl)
button.Attributes("onclick") = String.Format("return confirm('{0}');", _confirmText)
End If
End Sub
End Class
End Namespace
保存.vb文件。然后在.aspx页面中,以源模式打开页面并找到GridView定义(即标签。您可以选择要显示删除按钮的位置,第一个位置,第二个等等。请确保选择文本位置,以便您不更改任何定义,并添加以下
<custom:DeleteButtonField ConfirmText="Are you sure that you want to delete this record?"></custom:DeleteButtonField>
您还需要在&lt;%@ Page ...&gt;之后在页面顶部添加一行。如下
<%@ Register TagPrefix="custom" Namespace="myControls" %>
这也需要添加到您打算在GridView中使用新删除按钮的每个页面上。可能有一种方法可以将其设置为web.config中的默认值;在我学习的这个阶段,我不在那里。
保存.aspx页面并进行测试。您现在已经定义了一个公共Sub(它定义了一个标准的Delete按钮及其行为),您可以将其附加到应用程序中的任何GridView。