29/01/2009, 10:21
|
| | Fecha de Ingreso: junio-2008
Mensajes: 5
Antigüedad: 16 años, 6 meses Puntos: 0 | |
Respuesta: Problemas con checkbox y gridview paginado Efectivamente lo que sucede es que visualmente se marcan todos los checks pero internamente (guardo los marcados en un identitydatalist, solo se almacenan lo que realmente he marcado...) y se produce cuando cambio de pagina.
Te pongo los eventos de cambio de pagina y de marcar los checks para que que veas, no te pongo el codigo entero de la pagina porque es muy extenso
#region Eventos relacionados del Grid
protected void GridContactos_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Contacto Dest = (Contacto)e.Row.DataItem;
CheckBox chkUsuario = e.Row.FindControl("chkUsuario") as CheckBox;
if (chkUsuario != null)
{
chkUsuario.InputAttributes.Add("IdDest", Dest.pk_Contacto.ToString());
chkUsuario.InputAttributes.Add("EmailDest", Dest.EmailContacto);
chkUsuario.Checked = this.ListaContactosSeleccionados.GetIdentifyData(D est.pk_Contacto) != null;
}
}
}
/// <summary>
/// Evento provocado cuando un check cambia de estado
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void chkUsuario_CheckedChanged(object sender, EventArgs e)
{
IdentifyData Elem = new IdentifyData(
Convert.ToInt64(((CheckBox)sender).InputAttributes["IdDest"]),
((CheckBox)sender).InputAttributes["EmailDest"]);
this.SetDestinatario(Elem, ((CheckBox)sender).Checked);
}
/// <summary>
/// Controla el evento de cambio de estado en el chk todas que contiene el grid
/// </summary>
/// <param name="sender">Objeto que invoca el evento</param>
/// <param name="e">Argumentos de entrada del evento</param>
protected void chkTodas_CheckedChanged(object sender, EventArgs e)
{
Todas = ((CheckBox)sender).Checked;
foreach (GridViewRow row in GridContactos.Rows)
{
if (row.RowType == DataControlRowType.DataRow)
{
CheckBox chkEnviar = row.FindControl("chkUsuario") as CheckBox;
if (chkEnviar != null && (!chkEnviar.Checked.Equals(((CheckBox)sender).Chec ked)))
{
IdentifyData Elem = new IdentifyData(
Convert.ToInt64(chkEnviar.InputAttributes["IdDest"]),
chkEnviar.InputAttributes["EmailDest"]);
this.SetDestinatario(Elem, ((CheckBox)sender).Checked);
chkEnviar.Checked = ((CheckBox)sender).Checked;
}
}
}
}
/// <summary>
/// Evento producido en el cambio de indexación de la página.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridContactos_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridContactos.PageIndex = e.NewPageIndex;
EnlazaGridContactos(null);
} |