当子转发器为空时隐藏子转发器和父转发器

时间:2014-02-03 15:12:52

标签: c# asp.net

我对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 个答案:

答案 0 :(得分: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;
        }
    }
}

答案 1 :(得分: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;

}