【发布时间】:2013-02-24 02:13:34
【问题描述】:
有没有办法手动设置 AlternateItemTemplate? 我不止一次遇到过这个问题。
我只想将它用于最后一项。
也许ItemDataBound event 可以是一个解决方案,但我想不通。
只有我发现的有用的问题:
【问题讨论】:
标签: c# asp.net asprepeater
有没有办法手动设置 AlternateItemTemplate? 我不止一次遇到过这个问题。
我只想将它用于最后一项。
也许ItemDataBound event 可以是一个解决方案,但我想不通。
只有我发现的有用的问题:
【问题讨论】:
标签: c# asp.net asprepeater
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;
}
}
【讨论】:
AlternateItemTemlate 或其他仅在最后一项运行的中继器项。