A ver, esta es peliaguda...
La situación es la siguiente: colocas un DataGrid en un formulario Web (o peor aún, lo copias y lo pegas desde otro formulario) y luego escribes con todo el cariño manejadores de eventos para, por ejemplo, ordenar columnas, paginar o responder a botones de acción (evento ItemCommand) confiando en que todo irá perfectamente. Después de un buen rato de crear columnas, botones y código lo vas a probar y... ¡nada! parece que no está cogiendo los manejadores de los eventos y por lo tanto no hace ni caso a ciertas acciones.
Te puedes desesperar tratando de ponerlo a funcionar. No hay manera. ¿A qué se debe esto?
Bueno pues la solución es sencilla aunque a ver quien es el listo que la intuye a la primera.
Seguro que realizas el enlace del DataGrid dentro del evento Load de la página ¿verdad?. Tu código será similar al siguiente:
private void Page_Load(object sender, System.EventArgs e)
{
//algunas comprobaciones, conexiones, etc...
Datagrid.DataBind();
}
De acuerdo. Todo parece correcto. Al fin y al cabo lo único que haces es enlazar el control a los datos cuando carga la página... ¡Mal!. Lo que ocurre es que cuando pulsas un botón o una columna y la página envía de nuevo datos al servidor (hace un PostBack, en jerga .NET) se ejecuta el evento Load de nuevo y se vuelve a enlazar el DataGrid. Debido a ello, los elementos se regeneran y por lo tanto se hace caso omiso de los eventos que existían en elementos anteriores. Nada menos.
La solución: muy sencilla. Haz así:
private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostback)
{
//algunas comprobaciones, conexiones, etc...
Datagrid.DataBind();
}
}
Solucionado. Ahora sólo se enlazará al cargar la página. Esto no te ocurrirá si enlazas el DataGrid en otro lugar del código pero sí durante la carga de la página.
Parece una tontería pero te aseguro que puedes pasarte horas rompiéndote la cabeza para averiguarlo si no te lo cuentan antes.
De nada ;-)