C# 动态按钮单击时未触发事件处理程序
我有一个动态创建的带有onclick事件处理程序的按钮。问题是,当我点击按钮时,它没有点击代码隐藏中的事件C# 动态按钮单击时未触发事件处理程序,c#,asp.net,gridview,webforms,C#,Asp.net,Gridview,Webforms,我有一个动态创建的带有onclick事件处理程序的按钮。问题是,当我点击按钮时,它没有点击代码隐藏中的事件 protected void gvOrder_RowDataBound(object sender, GridViewRowEventArgs e) { DataTable dt = ds.Tables[0]; DropDownList ddl = new DropDownList(); TextBox txt = new TextBox(); int in
protected void gvOrder_RowDataBound(object sender, GridViewRowEventArgs e)
{
DataTable dt = ds.Tables[0];
DropDownList ddl = new DropDownList();
TextBox txt = new TextBox();
int index = 1;
if (e.Row.RowType == DataControlRowType.DataRow)
{
ddl = e.Row.FindControl("ddlNewO") as DropDownList;
txt = e.Row.FindControl("txtNewT") as TextBox;
}
foreach (DataRow r in dt.Rows)
{
string listitem = Convert.ToString(index);
ddl.Items.Add(listitem);
index++;
}
ddl.SelectedIndex = e.Row.RowIndex;
if (e.Row.RowIndex == 0)
{
ddl.Enabled = false;
txt.Enabled = false;
}
else if (e.Row.RowIndex != 0)
{
ddl.Items.Remove("1");
//Create ED button
if (e.Row.RowType == DataControlRowType.DataRow)
{
Button btnED = new Button();
btnED.ID = "btnED";
btnED.CssClass = "buttonsmall";
//btnED.CommandName = "ED";
btnED.EnableViewState = true;
btnED.Click += new EventHandler(btnED_Click);
foreach (DataRow r in dt.Rows)
{
btnED.Attributes.Add("ID", r.ItemArray[2].ToString());
if (r.ItemArray[3].ToString() == "1")
{
btnED.Text = "Disable";
}
else
{
btnED.Text = "Enable";
}
//Add button to grid
e.Row.Cells[5].Controls.Add(btnED);
}
}
}
}
protected void btnED_Click(object sender, EventArgs e)
{
// Coding to click event
}
我认为,您需要在创建的行上添加一个单击处理程序,而不是在数据绑定上
protected void gvOrderRowCreated(object sender, GridViewRowEventArgs e)
{
switch (e.Row.RowType) {
case DataControlRowType.DataRow:
Button btn = (Button)e.Row.FindControl("btnED");
btn.Command += btnED_Click;
break;
}
}
因此,这里的问题是,当页面被重新创建后,返回-没有更多的按钮!需要在每篇文章的页面上添加动态控件,以正确地返回fire事件。但是,在您的情况下,当
GridView
绑定时,在第一次加载时,您可以将按钮添加到页面。但是在点击后返回的帖子中,该按钮不会再次添加,因为GridView不会再次进行数据绑定。因此,ASP.NET无法派生事件源,并将其禁止
这里的修复方法是将GridView与每个帖子上的数据绑定。如果(!IsPostBack),请删除它。或者,您可以在模板字段中添加按钮并使用可见性-也可能是一种方法。您创建了多少个按钮?您是否已调试到代码中以查看它是否命中btnED。单击+=新建事件处理程序(btnED\U单击);你能发布gridview数据绑定代码吗?谢谢你的回答。如果你认为我的问题是正确的,我将非常感谢你投赞成票。