当前位置:编程学习 > C#/ASP.NET >>

求助:动态添加控件,点击后无法触发事件。。。

我动态生成一个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的生命周期的文章。 --------------------编程问答--------------------
引用 1 楼 findcaiyzh 的回复:
我推测,你没有把动态创建的控件放在Page_load或者OnInit中。要知道每次Request,Code behind类,也就是从Page继承的类 都是重新构造的,Designer里的控件,asp.net会帮你Create并初始化,从ViewState去到值,填充。对于动态创建的控件,每个Request你都要自己创建,因此放到Page_load或者OnInit中最好。
……

恩,做了下测试,确实如您所说,动态生成的控件,放在Page_Load下面,才能实现我要的效果。

但现在的问题是,这些控件我是执行搜索以后,才生成的,这样就没办法放在Page_Load面,请问该怎么解决呢? --------------------编程问答-------------------- 你用bt.Click+=再按tab键试试 --------------------编程问答--------------------
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,