Получаване на брой елементи в ретранслатора по време на OnItemDataBound

Опитвам се да получа броя на елементите в повторител, докато обработвам събитието OnItemDataBound. Това, което се опитвам да постигна, е доста просто; Опитвам се да скрия определен етикет на последния елемент в повторител. В момента се свързвам с ItemIndex и Items.Count, но тъй като е по време на OnItemDataBound, индексът и броят се увеличават заедно.

Ето какво имам досега:

Label myLabel = e.Item.FindControl<Label>("MyLabel");
if (myLabel != null)
{
    // as the item index is zero, I'll need to check against the collection minus 1?
    bool isLastItem = e.item.ItemIndex < (((Repeater)sender).Items.Count - 1);
    myLabel.Visible = !isLastItem;
}

Знам, че мога да прехвърля DataSource към колекцията от елементи с данни, които са били обвързани, но манипулаторът на събития OnItemDataBound се използва в множество повторители, така че ще ми трябва нещо малко по-общо.


person Richard    schedule 28.05.2012    source източник


Отговори (1)


Бихте ли могли да направите нещо от рода на, като сте задали Visible на false по подразбиране:

if (e.Item.ItemIndex > 0)
{
     var previousItem = ((Repeater)sender).Items[e.Item.ItemIndex - 1];
     var previousLabel = previousItem.FindControl<Label>("MyLabel");
     if (previousLabel != null)
     {
         previousLabel.Visible = true;
     }
}

Не съм сигурен дали това ще проработи - не знаех, че имате достъп до repeater.Items, докато не видях кода ви - но изглежда правдоподобно.

person Rawling    schedule 28.05.2012
comment
Това би проработило, ако се опитвах да скрия елемента на first елемент, но искам да го скрия на last. :) - person Richard; 28.05.2012
comment
@Richard Да... задайте Visible на false по подразбиране и след това този код го задава на true за всички елементи освен последния. (При всяко обвързване той намира предишния етикет и го показва.) - person Rawling; 28.05.2012
comment
ааа да, разбира се Това е възможно решение, благодаря. - person Richard; 28.05.2012