2012-03-21 154 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

相关问题