2014-02-03 4 views
1

У меня есть вопрос относительно повторителей в ASP.netСкрыть дочерний и родительский ретранслятор, когда ретранслятор ребенка пуст

У меня есть 2 повторителя вложенных.
Я хотел бы скрыть как родительский, так и дочерний ретранслятор, когда дочерний ретранслятор не имеет элементов. Каждый родитель со своими дочерними элементами предоставляет уникальные классы, такие как «class =» childlist_1 ».

ASCX файл:

<asp:Repeater ID="ParentRepeater" runat="server"> 
<ItemTemplate> 
    <ul class="Mainlist"> 
     <li> 
     <h3 class="selected"><a href="#">List 1</a></h3> 
     <ul id="DomainList" class="child-items" runat="server"> 
      <asp:Repeater ID="ChildRepeater" runat="server"> 
       <ItemTemplate><li><a href="#">Link to child item</a></li></ItemTemplate> 
      </asp:Repeater> 
     </ul> 
     </li> 
    </ul> 
</ItemTemplate> 
</asp:Repeater> 

Что является лучшим решением для этого?

Заранее благодарен!

ответ

2

Вы можете сделать это в ItemDataBound случае

protected void ParentRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { 
     // code that binds ChildRepeater 
     ..... 

     // check if ChildRepeater has no items 
     if (((Repeater)e.Item.FindControl("ChildRepeater")).Items.Count == 0) 
     { 
      e.Item.Visible = false; 
     } 
    } 
} 
+0

ли я использовать это в случае ItemDataBound? –

+0

См. Мой отредактированный ответ, если вы хотите сделать это в событии ItemDataBound. – ekad

+0

Да, это именно то, что мне нужно! большое спасибо –

0

Если, как я вам нравится использовать метод, чтобы связать ребенок ретранслятора (т.е. DataSource='<%# GetChildDatasource(Eval("parentID").ToString()) %>'), это не будет работать в качестве источника данных является связанным приложением после того, как родитель Метод itemdatabound запускается.

Обойти является использование метода PreRender на ребенка повторителя:

protected void ChildRpt_PreRender(object sender, EventArgs e) 
{ 
    //hide if empty 
    Repeater rpt = (Repeater)sender; 
    rpt.Visible = rpt.Items.Count > 0; 

} 
Смежные вопросы