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] (http://stackoverflow.com/questions/3815483/asp-net-repeater-eval) – pilavust
Что вы имеете в виду, без какого-либо заполнителя? Какая обработка необходима для последнего элемента? –
Я хочу использовать 'AlternateItemTemlate' или другой элемент ретранслятора, который запускается только в последнем элементе. – pilavust