当孩子中继器为空时,将孩子和家长中继器隐藏起来



我有一个关于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;
}

最新更新