gpt4 book ai didi

c# - 事件处理程序未在动态按钮单击时触发

转载 作者:行者123 更新时间:2023-11-30 17:00:27 25 4
gpt4 key购买 nike

我有一个带有 onclick 事件处理程序的动态创建的按钮。问题是,当我单击按钮时,它没有触发代码隐藏中的事件。

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
}

最佳答案

所以这里的问题是,当页面在回发时被重新创建时 - 没有更多的按钮!需要在每个回发的页面上添加动态控件以正确触发事件。但是,在您的情况下,当 GridView 绑定(bind)时第一次加载时,您将按钮添加到页面。但是在点击按钮后的回发中没有再次添加,因为 GridView 没有再次绑定(bind)数据。因此 ASP.NET 无法派生事件的来源,并将其抑制。

此处修复是将 GridView 与每次回发的数据绑定(bind)。从字面上看,如果您有 if (!IsPostBack) - 将其删除。或者您可以在模板字段中添加按钮并使用可见性 - 也可能是一种方法。

关于c# - 事件处理程序未在动态按钮单击时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com