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

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

我有一个动态创建的带有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
}

我认为,您需要在创建的行上添加一个单击处理程序,而不是在数据绑定上

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数据绑定代码吗?谢谢你的回答。如果你认为我的问题是正确的,我将非常感谢你投赞成票。