2016-11-30 64 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