jueves, mayo 05, 2005

ASP.NET: Evento ItemCommand en un DataGrid

Hoy me encontré con que el evento ItemCommand de un objeto DataGrid, se invoca no solo cuando se pulsa en alguna columna tipo Command definido dentro del DataGrid (como por ejemplo: Quitar, Editar, etc), sino que también se dispara cuando se cambia de una página a otra dentro del DataGrid.

Si el DataGrid tiene dos o más comandos definidos por item esto no es un problema, porque forzosamente el programador debió haber usado una construcción switch al programar el evento, como por ejemplo:


private void dgrLineas_ItemCommand(object source,
DataGridCommandEventArgs e)
{
switch (e.CommandName)
{
case "Delete":
// Codigo para el comando Delete
break;

case "Edit":
// Codigo para el comando Edit
break;
}
}


Como se ve, la propiedad CommandName del parámetro de argumentos e indica el comando que se generó. Cuando el evento se dispara por cambio de la página actual en el datagrid, el valor de CommandName es "Page". Sin embargo, normalmente esto debe ser obviado ya que el código para cambiar la página actual se coloca normalmente en el evento PageIndexChanged, por lo que no es necesario manejarlo a este nivel.

Cuando el DataGrid tiene solo una columna tipo comando, es fácil que el programador no incluya el switch y coloque directamente en el evento el código correspondiente a la acción seleccionada, causando un posible problema cuando el evento se invoque por un cambio de página en lugar de, por ejemplo, un click en la columna Quitar de una fila del datagrid.

Lo peor es que este problema solo se detecta si el datagrid llega a tener mas de una página... mientras solo tenga una, el código funcionará perfectamente.

Moraleja: SIEMPRE usar un switch dentro del evento ItemCommand de un DataGrid para evitar sorpresas indesables.

No hay comentarios: