c#以编程方式添加按钮事件
问题描述:
试图以编程方式将按钮添加到Webform。有些工作 - 其他工作则不行。 在下面的代码中,我在Page_Load中添加了btnY和btnX。 这两个工作 - 他们在页面上显示并触发事件 和事件处理程序中的代码工作.... 在页面加载中,我也运行bindData,它获取一个DataTable 并使用数据来创建控件。 在这个例子中我只创建Button。 这些按钮将正确显示在页面上,但点击后 它们只会执行回发。 事件处理程序中的代码不起作用 - 它会被调用吗? 事件处理程序对于所有按钮都是相同的。 任何想法为什么或如何使它工作?c#以编程方式添加按钮事件
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder1.Controls.Add(btn("btnY", "Y"));
Pages P = new Pages();
bindData(P.DT);
PlaceHolder1.Controls.Add(btn("btnX", "X"));
}
Button btn(string id, string text)
{
Button btn1 = new Button();
btn1.ID = id;
btn1.Text = text;
btn1.Click += new System.EventHandler(this.btn_click);
return btn1;
}
protected void bindData(DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
render(Convert.ToInt32(row["PageKey"]));
}
}
protected void render(int pageKey)
{
PlaceHolder1.Controls.Add(btn("btn_" + pageKey.ToString(), "Edit"));
}
protected void btn_click(object sender, EventArgs e)
{
Button btn = (Button)sender;
string id = btn.ID;
Pages P = new Pages();
bindData(P.DT);
lt.Text = "ID=" + id;
}
答
没关系..想通了..上面的例子应该工作,我实际的代码了,如果(!Page.PostBack)导致问题
添加'事件Handler'你'BTN '内部'Page_Load' – prograshid
刚刚在page_load中试过这个...仍然没有好的foreach(控件c在this.Controls中) { if(c是Button) { Button b =(Button)c; b.Click + = new System.EventHandler(this.btn_click); } } –