导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

动态生成控件不响应事件的问题(100分)

jonsonzxw 2003-04-25 10:30:44
我想问一个动态生成控件的问题,在线等,希望尽快答复,谢谢.
在我的网页上有一个Table,它作为我要动态生成的一系列linkbutton控件的容器,在代码中使用循环语句生成了若干linkbutton后,再为它们注册事件处理程序,但当单击这些linkbutton时,就是不执行事件处理程序,怎么办呢?

<table ....>
<tr><td>
....

<asp:Table CellPadding="0" CellSpacing="0" BorderColor="#DDDDDD" BorderStyle="Solid" BorderWidth="0" Runat="server" ID="table">
<asp:TableRow Runat="server"> <asp:TableCell id="Link" Runat="server" />
</asp:TableRow>
</asp:Table>

....
</table>

代码:

//动态生成控件
TableCell cell = (TableCell)table.FindControl("Link");

for(int i=start;i<end;i++)
{
LinkButton lb = new LinkButton();
lb.CommandName = "numbutton";
lb.CommandArgument = i.ToString();
//lb.ID = i.ToString();
lb.Text = i.ToString();
lb.Command += new System.Web.UI.WebControls.CommandEventHandler(OnLinkClick);
cell.Controls.Add(lb);
}

//事件处理程序
private void OnLinkClick(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
Response.Write("ssssssssssss");
}
...全文
51 点赞 收藏 20
写回复
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jonsonzxw 2003-04-25
该问题已在C#区由版主大人帮忙搞定了,我想这300分给200给版主,留100给其他参与者,版主应该没意见吧!
回复
timmy3310 2003-04-25
你的控件要重新创建,否则即使通过__doPostBack回来,也会找不到该控件的实例,更不用说触发它的事件了
回复
timmy3310 2003-04-25
你的Page_Load有没有加上

IsPostBack,如果加上是不行的,每次回来控件都需要重新创建
回复
snowjin78 2003-04-25
我之知道在vb.net中,在你动态生成控件中,使用visual basic addhandler 语句,这个语句将一个子例程与一个事件关联起来。
AddHandler btn.click, Addressof yourselrsub
其中,AddHandler ,Addressof 是关键字。然后,你可以自己编写你的yourselrsub过程。
回复
wangafei621 2003-04-25
动态生成代码是在Page_Load中吗?
给你的建议是在前一次动态生成时用一个static TableCell变量保存上一次动态生成的结果,然后在下一次Page_Load中对其Click事件再一次绑定
回复
xiongliang2003 2003-04-25
放在html容器中一般是没有影响的。最后办法 重起你的编译环境,
回复
jonsonzxw 2003-04-25
如果给每个linkbutton都指定ID的话,那么客户端返回的源文件代码是:


<table id="table" cellspacing="0" cellpadding="0" bordercolor="#DDDDDD" border="0" style="border-color:#DDDDDD;border-width:0px;border-style:Solid;border-collapse:collapse;">
<tr>
<td nowrap="nowrap"><td id="Link"><span style="color:Red;font-size:9pt;font-weight:bold;">[1]</span> <a id="2" href="javascript:__doPostBack('2','')" style="color:Black;font-size:9pt;">2</a> <a id="3" href="javascript:__doPostBack('3','')" style="color:Black;font-size:9pt;">3</a> <a id="4" href="javascript:__doPostBack('4','')" style="color:Black;font-size:9pt;">4</a> <a id="5" href="javascript:__doPostBack('5','')" style="color:Black;font-size:9pt;">5</a> <a id="6" href="javascript:__doPostBack('6','')" style="color:Black;font-size:9pt;">6</a> 
</tr>
</table>

也就是说ID没有变
回复
blackant2 2003-04-25
俺也是实做过的
的确可以实现
至少我本机没有任何问题了
可能你的问题不是出在这儿
回复
jonsonzxw 2003-04-25
我没有指定ID,好象可以不用ID的吧
回复
jonsonzxw 2003-04-25
所以我在最上面的贴子中写了:

<table ....>
<tr><td>
....

<asp:Table CellPadding="0" CellSpacing="0" BorderColor="#DDDDDD" BorderStyle="Solid" BorderWidth="0" Runat="server" ID="table">
<asp:TableRow Runat="server">
...
<asp:TableCell id="Link" Runat="server" />
...
</asp:TableRow>
</asp:Table>

....
</table>
回复
Lostinet 2003-04-25
检查循环后LinkButton的id是否变了。
回复
xiongliang2003 2003-04-25
那就是这段代码没有问题,单独放在页面上试过了,
你的Table是不是放在什么别的容器中呀?有可能会被影响的。
回复
jonsonzxw 2003-04-25
其实上面的代码只是核心代码,有一些东东我删除了,但为何在我这不能运行.
回复
jonsonzxw 2003-04-25
to blackant2:

也不行呀!!
回复
xiongliang2003 2003-04-25
奇怪了,我copy你的做了一个,没有任何问题呀,
回复
blackant2 2003-04-25
LinkButton lb;
for(int i=0;i<10;i++){
lb=new LinkButton();
lb.CommandArgument=i.ToString();
lb.Text="   "+i.ToString()+"   ";
lb.Click+=new System.EventHandler(lb_Click);
Table1.Rows[0].Cells[0].Controls.Add(lb);
}

private void lb_Click(object sender,System.EventArgs e){
Response.Write(((LinkButton)sender).CommandArgument);
}
回复
jonsonzxw 2003-04-25
Click也不行
回复
blackant2 2003-04-25
使用click吧
lb.click += new System.EventHandler(OnLinkClick);

回复
jonsonzxw 2003-04-25
谁能搞定,给他300分
回复
zwztu 2003-04-25
关注
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告