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; 

} 
+1

添加'事件Handler'你'BTN '内部'Page_Load' – prograshid

+0

刚刚在page_load中试过这个...仍然没有好的foreach(控件c在this.Controls中) { if(c是Button) { Button b =(Button)c; b.Click + = new System.EventHandler(this.btn_click); } } –

没关系..想通了..上面的例子应该工作,我实际的代码了,如果(!Page.PostBack)导致问题