簡體   English   中英

當子代中繼器為空時隱藏子代和父代中繼器

[英]Hide child and parent repeater when child repeater is empty

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

最好的解決方案是什么?

提前致謝!

您可以在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;
        }
    }
}

如果像我一樣,您想使用一種方法來綁定子轉發器(即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;

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM