手动设置AlternatingItemTemplate

时间:2013-02-24 02:13:34

标签: c# asp.net asprepeater

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

我只想将它用于最后一项。 也许ItemDataBound事件可能是一个解决方案,但我无法理解。

我发现的唯一有用的问题:

1 个答案:

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