LinkButton.Click事件在GridView行数据绑定中动态附加时未触发
本文关键字:动态 事件 Click GridView 数据绑定 LinkButton | 更新日期: 2023-09-27 17:59:10
我在asp:UpdatePanel
中有一个asp:GridView
,它有一列asp:LinkButton
控件。
在行数据绑定事件上,LinkButton将为其分配点击事件处理程序。
我已经尽了一切可能将点击连接起来,但没有一个事件发生。
我做错什么了吗?
aspx:
<asp:UpdatePanel ID="MainUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lblTest" Text="test" runat="server" />
<asp:GridView ID="gvClientsArchive" runat="server" AllowSorting="true" DataSourceID="dsClients"
OnRowDataBound="gvClientsArchive_RowDataBound" SkinID="gvList"
AllowPaging="true" PageSize="25" Visible="false">
...
代码背后:
protected void gvClientsArchive_RowDataBound(object sender, GridViewRowEventArgs e)
{
...
int company_id = int.Parse(drvRow["company_id"].ToString());
LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore");
lnkRestore.Click += new System.EventHandler(this.doRestore);
按钮处理程序代码:
private void doRestore(object sender, EventArgs e)
{
lblTest.Text = "restore clicked";
}
我也试过:
protected void gvClientsArchive_RowDataBound(object sender, GridViewRowEventArgs e)
{
...
LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore");
lnkRestore.Click += delegate
{
lblTest.Text = "restore clicked";
};
RowDataBound
是不合适的。使用RowCreated
:
protected void gvClientsArchive_RowCreated(object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lnkRestore = (LinkButton)e.Row.FindControl("lnkRestore");
lnkRestore.Click += new System.EventHandler(this.doRestore);
}
}
只有当您对网格进行数据绑定时才会触发RowDataBound
,而不是在每次需要的回发时进行数据绑定,因为所有控件都是在页面生命周期结束时释放的。现在也太晚了。
如果使用TemplateFields
,那么在aspx上以声明方式注册处理程序会更容易。