我尝试动态地将点击事件添加到转发器项目中的表格,下面是服务器端代码。但是,Findcontrol无法在项目中找到控件......我做错了什么?
rownr = 0;
foreach (RepeaterItem ri in Lijst.Items)
{
string targ = "javascript:return GoAanvraag(" + rownr.ToString() + ");";
Table tb1 = ((Table) ri.FindControl("ItemTabel"));
tb1.Attributes.Add("onclick", targ);
rownr++;
}
转发器代码是:
<asp:Repeater ID="Lijst" runat="server" DataSourceID="SqlDataSource2"
OnItemDataBound="Lijst_ItemDataBound"
>
<HeaderTemplate>
</HeaderTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
<ItemTemplate>
<table ID="ItemTabel" style="width:100%">
<tr>
<td style="width:100%">
<asp:Label ID="Regel" runat="server"></asp:Label>
</td>
<td style="width:100%">
<asp:Label ID="Plancode" runat="server" font-size="20px" align=right></asp:Label>
</td>
<asp:Button ID="btnGoAanvraag" runat="server" visible="false"/>
</tr>
</table>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
答案 0 :(得分:2)
这里有很多事情。
首先,您的表不是服务器端控件。要使其成为一个,请添加runat属性:
<table ID="ItemTabel" style="width:100%" runat="server">
也就是说,处理表本身的点击是很奇怪的。你真的是指桌子里面的任何控件吗?
其次,目前尚不清楚何时运行此代码。这必须在ItemDataBound事件中或之后,与之前一样,项目模板中的控件不存在。如果它在ItemDataBound中,则没有理由迭代所有行。每行/每个项目都会引发一次ItemDataBound,并且您在事件参数中有一个项目引用,因此您只能更新该项目。