Asp.net 如何在另一个中继器中查找中继器

Asp.net 如何在另一个中继器中查找中继器,asp.net,repeater,Asp.net,Repeater,我想在另一个中继器中找到中继器。但是我找不到。我的代码是 <asp:Repeater ID="rep_test" runat="server"> <ItemTemplate> <div id='h<%# DataBinder.Eval(Container, "ItemIndex") %>' class="header" onclick='ToggleDisplay(<%# DataBinder.Eval(Contai

我想在另一个中继器中找到中继器。但是我找不到。我的代码是

<asp:Repeater ID="rep_test" runat="server">
     <ItemTemplate>
           <div id='h<%# DataBinder.Eval(Container, "ItemIndex") %>' class="header" onclick='ToggleDisplay(<%# DataBinder.Eval(Container, "ItemIndex") %>);'>
                    <%#DataBinder.Eval(Container.DataItem, "ID")%>
           </div>
           <div id='d<%# DataBinder.Eval(Container, "ItemIndex") %>' class="details">
           <asp:Repeater ID="rep_hello" runat="server">
                <ItemTemplate>
                    <%#DataBinder.Eval(Container.DataItem, "batchid")%><br />
                    <%#DataBinder.Eval(Container.DataItem, "ts")%><br />
                </ItemTemplate>
           </asp:Repeater>
                <%--    <%#DataBinder.Eval(Container.DataItem, "batchid")%><br />
                    <%#DataBinder.Eval(Container.DataItem, "ts")%><br />--%>
            </div>
     </ItemTemplate>
</asp:Repeater>




您可以尝试使用.FindControl()。在VB中,它类似于

Dim rpt as Repeater = rep_test.FindControl("rep_hello")

如果您将一个中继器放在另一个中继器的项目模板中,这意味着主中继器(rep_test)的每个项目都将有一个中继器(rep_hello)。所以你实际上需要在repeaterItem中找到中继器。您可以通过所有嵌套的中继器进行迭代,如下所示:

foreach (RepeaterItem item in rep_test)
        Repeater rptr = (Repeater)item.FindControl("rep_hello");
例如:

ItemDataBound事件处理程序中:

protected void rep_test_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==  ListItemType.AlternatingItem)
  {
    (e.Item.FindControl("rep_hello") as Repeater).DataSource = YourOtherDataSource;      
  }
}

通常,当我看到这种情况时,您希望在所有内部中继器上执行一些事件。我通常在ItemDataBound事件中处理这种事情

将OnItemDataBound属性添加到中继器

<asp:Repeater ID="rep_test" runat="server" 
OnItemDataBound="rep_test_ItemDataBound">

在本例中定义“查找”。我可以在那里直观地找到它。你是怎么找到它的?如果您正在使用代码,请显示代码并告诉我们调试时发生了什么。不幸的是,对于repeater类型的控件,它不是这样工作的。
protected void rptBasket_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || 
        e.Item.ItemType == ListItemType.AlternatingItem)
    {
         Repeater innerRepeater = (Repeater)e.Item.FindControl("rep_hello");
         // Now your have your repeater...do what you want with it.
    }
}