ASP.NET Repetidor: recorre los elementos de la plantilla de elementos


Tengo un repetidor, que está enlazado en preRender con elementos. En la plantilla Elemento cada fila tiene una casilla de verificación. Esto funciona bien.

Estoy tratando de recorrer todas las casillas de verificación en la plantilla de elemento después de que se haya enlazado. ¿Hay alguna manera de hacer esto?

Gracias!

Author: Funky, 2011-06-08

4 answers

Me parece que quieres usar el evento ItemDataBound.

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

Usted querrá comprobar el ItemType del RepeaterItem para que no intente encontrar la casilla de verificación en Header/Footer/Seperator/Pager/Edit

Su evento se vería algo así como:

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

Este evento se puede generar agregando el evento en su código detrás de like entonces:

rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);

O añadiéndolo al control del cliente:

onitemdatabound="rptItems_ItemDataBound"

Alternativamente, puede hacer lo que otros sugirieron e iterar sobre los repetidores, sin embargo, aún debe verificar el tipo de elemento.

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

Usted querría hacer eso en la página PreRender, después de que el Repetidor haya sido enlazado.

 40
Author: Phill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-09 01:10:52

Prueba esto.

foreach (RepeaterItem ri in Repeater1.Items)
{
     if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
     {
         CheckBox checkBoxInRepeater = ri.FindControl("CheckBox1") as CheckBox;

         //do something with the checkbox
     }
}
 15
Author: CYMR0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-20 19:16:12
for (int item = 0; item < Repeater.Items.Count; item++)
{
   CheckBox box = Repeater.Items[item].FindControl("CheckBoxID") as CheckBox;
   if (box.Checked)
   {
      DoStuff();
   }
   else
   {
      DoOtherStuff();
   }
}
 3
Author: carlbenson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-08 16:08:43

Algunos pensamientos diferentes vienen a la mente:

  1. ¿Hay una necesidad específica de enlazar este repetidor en preRender? Considere usar la forma más típica de enlazar después del evento Page_Load.

  2. ¿Por qué desea buscar las casillas de verificación después de que el repetidor haya sido enlazado? Puedes hacer lo que necesites hacer mientras está siendo enlazado usando este evento:

    OnItemDataBound = "Repeater1_OnItemDataBound"

  3. De cualquier manera, siempre puedes regresa y mira dentro del repetidor simplemente iterando a través de él. Tenga en cuenta que es posible que tenga que hacer una búsqueda recursiva si la casilla de verificación está anidada en un elemento diferente dentro del elemento repetidor

    Para cada (RepeaterItem r en Repeater1.Elemento) { Casilla de verificación c = r. FindControl ("CheckBox1") como casilla de verificación;

    / / HAZ lo que sea }

 1
Author: spiderman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-08 21:49:38