Получить количество элементов в ретрансляторе во время 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