Подтвердить что ты не робот

Как я могу просмотреть элементы в шаблоне элемента из asp: Repeater?

У меня есть повторитель, который связан с preRender предметами. В шаблоне товара в каждой строке есть флажок. Это отлично работает.

Я пытаюсь перебрать все флажки в шаблоне элемента после его привязки. Есть ли способ сделать это?

4b9b3361

Ответ 1

Мне кажется, что вы хотите использовать событие ItemDataBound.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx

Вам нужно будет проверить ItemType для RepeaterItem, чтобы вы не пытались найти этот флажок в разделе Заголовок/Нижний колонтитул/Сеператор/Пейджер/Редактировать

Ваше событие будет выглядеть примерно так:

void rptItems_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var checkBox = (CheckBox) e.Item.FindControl("ckbActive");

        //Do something with your checkbox...
        checkBox.Checked = true;
    }
}

Это событие можно повысить, добавив событие в свой код так:

rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);

Или добавив его в элемент управления на клиенте:

onitemdatabound="rptItems_ItemDataBound"

В качестве альтернативы вы можете сделать так, как предлагали другие, и перебирать по RepeaterItems, однако вам все равно нужно проверить тип элемента.

foreach (RepeaterItem item in rptItems.Items)
{
    if (item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
    {
        var checkBox = (CheckBox)item.FindControl("ckbActive");

        //Do something with your checkbox...
        checkBox.Checked = true;
    }
}

Вы хотели бы сделать это в Page PreRender, после того как ретранслятор был связан.

Ответ 2

Попробуй это.

for each (RepeaterItem ri in Repeater1.Items)
{
     CheckBox CheckBoxInRepeater = ri.FindControl("CheckBox1") as CheckBox;

    //do something with the checkbox
}

Ответ 3

for (int item = 0; item < Repeater.Items.Count; item++)
{
   CheckBox box = Repeater.Items[item].FindControl("CheckBoxID") as CheckBox;
   if (box.Checked)
   {
      DoStuff();
   }
   else
   {
      DoOtherStuff();
   }
}

Ответ 4

На ум приходит несколько разных мыслей:

  1. Есть ли особая необходимость связывать этот репитер в preRender? Попробуйте использовать более типичный способ привязки после события Page_Load.

  2. Почему вы хотите найти флажки после привязки повторителя? Можете ли вы делать все, что вам нужно, пока оно связано, используя это событие:

    OnItemDataBound="Repeater1_OnItemDataBound"
    
  3. В любом случае, вы всегда можете вернуться назад и заглянуть внутрь ретранслятора, просто перебирая его. Обратите внимание, что вам может потребоваться выполнить рекурсивный поиск, если флажок вложен в другой элемент внутри элемента повторителя.

    for each (RepeaterItem r in Repeater1.Items) {
        CheckBox c = r.FindControl("CheckBox1") as CheckBox;
        //DO whatever
    }