2016-11-30 48 views
0

我正尝试将点击事件动态添加到中继器的项目中的表中,服务器端代码如下。但是,Findcontrol无法找到该项目中的控件...我做错了什么?Repeater上的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> 

回答

2

夫妇的事情在这里。

首先,您的表不是服务器端控件。要做到这一点,添加runat属性:

<table ID="ItemTabel" style="width:100%" runat="server"> 

这就是说,它处理点击表本身很奇怪。你实际上是否意味着桌子内的任何控件?

其次,在运行此代码时并不清楚。这要在ItemDataBound事件或更高版本中,因为之前的项目模板中的控件不存在。如果它在ItemDataBound中,则没有理由遍历所有行。 ItemDataBound每行/项目引起一次,并且事件参数中有一个项目引用,因此您只能更新该项目。

+0

谢谢,问题出在“runat”。我似乎总是忘记这一点,然后忘记我忘了))) – Jur

相关问题