【问题标题】:Set AlternateItemTemplate Manually手动设置 AlternateItemTemplate
【发布时间】:2013-02-24 02:13:34
【问题描述】:

有没有办法手动设置 AlternateItemTemplate? 我不止一次遇到过这个问题。

我只想将它用于最后一项。 也许ItemDataBound event 可以是一个解决方案,但我想不通。

只有我发现的有用的问题:

【问题讨论】:

    标签: c# asp.net asprepeater


    【解决方案1】:

    ItemDataBound 确实是一个可能的选项,但要使其工作,您需要转发器项目的总数,以便您可以识别最后一个项目:

    protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        int itemsCount = ((List<SomeClass>)rptDummy.DataSource).Count;
    
        if (e.Item.ItemType == ListItemType.Item)
        { 
            if(e.Item.ItemIndex == itemsCount - 1)
            {
                //Do Things here
            }
        }
    }
    

    您甚至可以在同一个模板中有两个占位符,一个专门用于最后一项:

    <ItemTemplate>
        <asp:PlaceHolder id="phIsNotLastOne" runat="server">Is not last</asp:PlaceHolder>
        <asp:PlaceHolder id="phIsLastOne" runat="server">Is last</asp:PlaceHolder>
    </ItemTemplate>
    

    然后你可以这样做:

    protected void rptDummy_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        long itemsCount = ((List<SomeClass>)rptDummy.DataSource).Count;
    
        if (e.Item.ItemType == ListItemType.Item)
        { 
            PlaceHolder phIsLastOne = (PlaceHolder)e.Item.FindControl("phIsLastOne");
            PlaceHolder phIsNotLastOne = (PlaceHolder)e.Item.FindControl("phIsNotLastOne");
            phIsLastOne.Visible = e.Item.ItemIndex == itemsCount - 1;
            phIsNotLastOne.Visible = !this.phIsLastOne.Visible;
        }
    }
    

    【讨论】:

    • 感谢您的回复。这可以正常工作。我对仅使用中继器项目处理问题感到好奇。我也找到了和你类似的回复:link
    • 什么意思,没有任何占位符?最后一件需要怎么处理?
    • 我想使用AlternateItemTemlate 或其他仅在最后一项运行的中继器项。
    • 是的,有可能,您可以使用附加模板、LastItemTemplate 或其他东西实现自定义转发器。
    • 这似乎是唯一的解决方案。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多