2013-06-21 89 views
4

這是非常相似的這些問題,但他們似乎並沒有幫我(會解釋爲什麼下面):
如何添加一個事件處理程序的動態生成按鈕

我創建一個C#aspx頁面。該頁面抓取一堆數據,然後從中創建一張表。表中的一列包含一個按鈕,它在構建數據時動態創建(因爲按鈕的操作依賴於表中的數據)。

Default.aspx的

<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Table ID="tblData" runat="server"></asp:Table> 
    </div> 
    </form> 
</body> 

Defafult.aspx.cs

protected void Page_Load(object sender, EventArgs e) 
    { 
     Build_Table(); 
    } 

protected void Build_Table() 
    { 
     //create table header row and cells 
     TableHeaderRow hr_header = new TableHeaderRow(); 
     TableHeaderCell hc_cell = new TableHeaderCell(); 
     hc_cell.Text = "This column contains a button"; 
     hr_header.Cells.Add(hc_cell); 
     tblData.Rows.Add(hr_header); 

     //create the cell to contain our button 
     TableRow row = new TableRow(); 
     TableCell cell_with_button = new TableCell(); 

     //create the button 
     Button btn1 = new Button(); 
     btn1.Click += new EventHandler(this.btn1_Click); 

     //add button to cell, cell to row, and row to table 
     cell_with_button.Controls.Add(btn1); 
     row.Cells.Add(cell_with_button); 
     tblData.Rows.Add(row); 
    } 

protected void btn1_Click(Object sender, EventArgs e) 
    { 
     //do amazing stuff 
    } 

這裏就是我絆倒了。我明白我的EventHandler並沒有被解僱,因爲它需要轉移到Page_Load方法中。但是,如果我將btn1創建和EventHandler移至Page_Load,我無法再在Build_Table中訪問它們!

我看到的所有代碼示例都有btn1靜態添加到ASPX頁面中,或者在Page_Load中動態創建它。什麼是我想要完成的最好的方法?

+0

我跑你的代碼,它的工作原理,事件處理程序沒有問題。你有沒有證實你的經紀人正在解僱,但是在做「驚人的事情」時發生了一些不好的事情? –

回答

5

與ID創建按鈕,你綁定事件之前:

Button btn1 = new Button(); 
btn1.ID = "btnMyButton"; 
btn1.Click += new EventHandler(this.btn1_Click); 

確保每個按鈕都有一個唯一的ID。另外,我親自將代碼移至Page_Init而不是Page_Load

+1

謝謝!這工作。 –

相關問題