2012-03-21 151 views
2

我有一個來自SQL數據庫的數據表,並且表中存在少數行和列。 用戶必須在顯示數據之前先提供憑證,以便動態創建表(及其內容)。刪除按鈕後事件處理程序不會觸發C#

對錶中的每一行我把它添加使細胞與「刪除」按鈕上:

// more code to create the table above 
    Button remove = new Button(); 
    remove.Text = "Remove"; 
    remove.Click += new EventHandler(remove_Click); 

    TableCell last = new TableCell(); 
    last.Controls.Add(remove); 

    row.Cells.Add(last); 
    //... 

當用戶點擊我想在數據庫中的相應記錄要刪除的按鈕,表回發後更新表。

這個代碼寫在remove_Click中,但事件永遠不會被觸發,只是因爲在回發之後remove按鈕不再存在,因此按鈕的事件不能被觸發。 如這裏解釋:Dynamically Added Event Handler Not Firing

的代碼工作正常,如果我不刪除的按鈕,但我怎麼去觸發事件,並且仍然想刪除的按鈕?

+3

這怎麼可能呢?該事件必須被解僱才能被解僱,因此在解僱前解僱可能不是問題所在。 – Ryan 2012-03-21 15:42:02

+0

你確定你必須刪除按鈕,而不僅僅是禁用或隱藏它嗎? – 2012-03-21 15:43:27

+0

根據你引用的線程,你需要按鈕來觸發事件..也許你需要在其他地方添加代碼,並知道你收到什麼類型的回發? – gbianchi 2012-03-21 15:49:40

回答

1

調用任何在remove_Click事件處理程序中重新構建表格的函數。由於該記錄在刪除按鈕觸發後不存在於數據庫中,因此第二次調用BuildTable()時,在構建表時不會包含該記錄。

假設你的.aspx看起來像:

... 
<asp:PlaceHolder id="phTable" runat="server"> 
... 

嘗試是這樣的:

PageLoad(...) 
    { 
     BuildTable(); 
    } 
    BuildTable() 
    { 
     phTable.Controls.Clear(); 
     Table T = new Table(); 
     //do stuff 
     phTable.Controls.Add(T); 


    } 
    protected void remove_Click(object sender, EventArgs e) 
    { 
     //remove record from database 
     BuildTable(); 

    } 
+0

正是我在找什麼,我覺得有一種方法可以做到這一點,而不隱藏/禁用按鈕,但無法弄清楚到底如何去做。謝謝 – Aerus 2012-03-21 16:08:36

1

您必須爲您的Button控件分配一個唯一的ID。

+0

我不明白如何將一個唯一的ID添加到我的'Button'中會改變什麼?我已經在我的項目中嘗試了這個變化,並且在一個小例子中,事件仍然沒有發生。 – Aerus 2012-03-21 16:00:02

+0

@Aerus ASP .Net依賴於此。以這種方式標識哪個按鈕被點擊。 – 2012-03-21 16:12:25

相關問題