asp.net
  • repeater
  • 2011-09-07 50 views 2 likes 
    2

    我想找到另一箇中繼器內的中繼器。但我無法找到。我的代碼是如何找到另一箇中繼器內的中繼器

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

    在這種情況下定義「find」。我可以直觀地在那裏找到它。你是如何找到它的?如果您使用的是代碼,請顯示代碼並告訴我們通過它進行調試時發生了什麼。 – David

    回答

    1

    例子:

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

    您可以嘗試使用.FindControl()。在VB中,它會像

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

    不幸的是,對於中繼器類型的控件來說,它並不是那種方式。 –

    2

    如果你把一箇中繼器的另一箇中繼器,這意味着主中繼器(rep_test)的每一個項目都會有它裏面(rep_hello)中繼器的項目模板中。所以你實際上需要在repeaterItem中找到中繼器。可以遍歷低谷所有嵌套中繼器是這樣的:

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

    通常當我看到這種事情,你想在所有內部中繼器上執行一些事件。我通常做的是在ItemDataBound事件中處理這種事情。

    將OnItemDataBound屬性添加到您的Repeater。

    <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. 
        } 
    } 
    
    相關問題