我有一个表,其中包含来自SQL数据库的数据,该表由几行和几列组成。在显示包含数据的表之前,用户必须首先提供凭据,因此我动态地创建表(及其内容)。
在表中的每一行上,我都添加了一个带有"删除"按钮的单元格:
// 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_Click
事件处理程序中再次调用构建表的任何函数。由于在remove按钮触发后,数据库中不存在该记录,因此第二次调用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();
}
您必须为Button
控件分配一个唯一的ID。