c# - paginar - Repetidor de ASP.NET: recorre los elementos de la plantilla de elementos
repeater asp net ejemplo (4)
Algunos pensamientos diferentes vienen a la mente:
¿Existe una necesidad específica de vincular este repetidor en preRender? Considere usar la forma más típica de enlace después del evento Page_Load.
¿Por qué desea buscar las casillas de verificación después de que el repetidor haya sido enlazado? ¿Puede hacer lo que tenga que hacer mientras está vinculado mediante el uso de este evento?
OnItemDataBound = "Repeater1_OnItemDataBound"
De cualquier manera, siempre puedes retroceder y mirar dentro del repetidor simplemente recorriéndolo. 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.Items) {CheckBox c = r.FindControl ("CheckBox1") como CheckBox;
//Hacer cualquier cosa }
Tengo un repetidor, que está vinculado a preRender con elementos. En la plantilla Artículo, cada fila tiene una casilla de verificación. Esto funciona bien
Estoy intentando recorrer todas las casillas de verificación en la plantilla del elemento después de que se haya enlazado. ¿Hay alguna forma de hacer esto?
¡Gracias!
Me parece que quieres usar el evento ItemDataBound.
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound.aspx
Querrá marcar el ItemType del RepeaterItem para no intentar encontrar la casilla de verificación en Encabezado / Pie de página / Separador / Buscapersonas / Editar
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 al agregar el evento en tu código de la siguiente manera:
rptItems.ItemDataBound += new RepeaterItemEventHandler(rptItems_ItemDataBound);
O agregándolo al control en el cliente:
onitemdatabound="rptItems_ItemDataBound"
Alternativamente, puede hacer lo que otros sugirieron e iterar sobre RepeaterItems, sin embargo, aún necesita 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.
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
}
}
for (int item = 0; item < Repeater.Items.Count; item++)
{
CheckBox box = Repeater.Items[item].FindControl("CheckBoxID") as CheckBox;
if (box.Checked)
{
DoStuff();
}
else
{
DoOtherStuff();
}
}