2014-01-20 71 views
0

試圖以編程方式將按鈕添加到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); } } –

回答

0

沒關係..想通了..上面的例子應該工作,我實際的代碼了,如果(!Page.PostBack)導致問題

相關問題