求助:动态添加控件,点击后无法触发事件。。。
我动态生成一个Table,并且用了ASPNETPAGER做翻页,其中有一列是动态添加到LinkBotton,点击后却无法触发事件,并且当前页表格的内容也会消失,要点击分页控件,才会再把表格内容刷新出来。代码如下:
while (startIndex <= AspNetPager1.EndRecordIndex)
{
int i = startIndex - 1;
HtmlTableRow newrow = new HtmlTableRow();
HtmlTableCell newtd0 = new HtmlTableCell();
n++;
LinkButton bt = new LinkButton();
bt.ID = "bt" + n;
bt.Text = "查看";
bt.CommandArgument = ds.Tables[0].Rows[i]["ID"].ToString();
bt.Command += new CommandEventHandler(this.bt_Click);
newtd0.Controls.Add(bt);
newrow.Cells.Add(newtd0);
infoTable.Rows.Add(newrow);
startIndex++;
}
public void bt_Click(object sender, CommandEventArgs e)
{
Response.Write("ok!");
}
假设表格每页有5条数据,共3页,当前位置是第1页。
点击LinkButton查看以后,没有触发bt_Click事件,并且表格里原本显示的5条数据也不显示了,要点击第2页,第2页的数据又能被刷新出来,说明DataSet还是存在的。
请哪位兄弟能帮我指点一下,该如何解决这个问题。。。 --------------------编程问答-------------------- 我推测,你没有把动态创建的控件放在Page_load或者OnInit中。要知道每次Request,Code behind类,也就是从Page继承的类 都是重新构造的,Designer里的控件,asp.net会帮你Create并初始化,从ViewState去到值,填充。对于动态创建的控件,每个Request你都要自己创建,因此放到Page_load或者OnInit中最好。
参考msdn文章:
HOW TO: Dynamically Create Controls in ASP.NET by Using Visual C# .NET
http://support.microsoft.com/kb/317794
--------------------编程问答-------------------- 建议看一下asp.net的生命周期的文章。 --------------------编程问答--------------------
恩,做了下测试,确实如您所说,动态生成的控件,放在Page_Load下面,才能实现我要的效果。
但现在的问题是,这些控件我是执行搜索以后,才生成的,这样就没办法放在Page_Load面,请问该怎么解决呢? --------------------编程问答-------------------- 你用bt.Click+=再按tab键试试 --------------------编程问答--------------------
补充:.NET技术 , C#