【问题标题】:how to find repeater inside another repeater如何在另一个中继器中找到中继器
【发布时间】:2011-09-07 21:11:34
【问题描述】:

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

<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>

【问题讨论】:

  • 在这种情况下定义“查找”。我可以在那里直观地找到它。你是如何试图找到它的?如果您正在使用代码,请显示代码并告诉我们您在调试时发生了什么。

标签: asp.net repeater


【解决方案1】:

如果您将转发器放在另一个转发器的项目模板中,这意味着主转发器 (rep_test) 的每个项目内部都会有一个转发器 (rep_hello)。所以你实际上需要在repeaterItem 中找到repeater。您可以像这样遍历所有嵌套的中继器:

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

【讨论】:

    【解决方案2】:

    例子:

    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;      
      }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 不幸的是,对于中继器类型的控件,它不能那样工作。
      【解决方案4】:

      通常当我看到这种事情时,你想在所有内部中继器上执行一些事件。我通常做的是在 ItemDataBound 事件中处理这种事情。

      将 OnItemDataBound 属性添加到您的中继器。

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

      然后在后端添加一个处理程序,调用 FindControl。

      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.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        相关资源
        最近更新 更多