2013-02-24 2 views
1

Есть ли способ установить AlternateItemTemlate вручную? Я страдал от этого вопроса не один раз.Set AlternateItemTemplate вручную

Я хочу использовать его только для последнего элемента. Может быть, ItemDataBound Событие может быть решением, но я не могу понять.

Только полезные вопросы, которые я нашел:

ответ

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; 
    } 
} 
+0

Спасибо за ответ. Это может работать нормально. Мне было любопытно обращаться с поблемом только с помощью элементов ретранслятора. Я также нашел ответ, подобный вашему: [link] (http://stackoverflow.com/questions/3815483/asp-net-repeater-eval) – pilavust

+0

Что вы имеете в виду, без какого-либо заполнителя? Какая обработка необходима для последнего элемента? –

+0

Я хочу использовать 'AlternateItemTemlate' или другой элемент ретранслятора, который запускается только в последнем элементе. – pilavust