miércoles, 13 de julio de 2011

GridView anidado en ASP .Net

En ocasiones, en nuestras aplicaciones web con ASP .Net necesitamos mostrar datos en una cuadricula pero agrupando algunos registros. Algo así como el típico caso de Maestro Detalle, pero el detalle dentro de la misma grilla. En ASP .Net esto se resuelve fácilmente con el control GridView, para obtener el resultado siguente:
GridView Anidado
El gráfico anterior muestra a un GridView que muestra los datos como maestro detalle. Ahora veremos como es posible hacer esto en una aplicación.
En el caso anterior, la grilla principal tiene 3 columnas, una para el Id. Cat., la segunda para la Categoría y la tercera, será un Template que contendrá otro GridView en su ItemTemplate, esa es la parte fácil; la parte más fácil se da en el evento RowDataBound del GridView principal, ya que este evento se ejecuta cada vez que se enlaza una fila del gridview a los datos que mostrará.
Ya en este evento lo que se debe hacer es simplemente crear una vista de la tabla de detalle filtrando los datos que necesitamos por el id de la tabla maestro. Para poder acceder al GridView que se encuentra en la tercera columnna de la grilla principal simplemente aplicamos una conversión del objeto en la coluna correspondiente, tal y como se muestra en la linea:
GridView gdv = (GridView)e.Row.Cells[2].FindControl(“gdvProductos”);
Hay que considerar que el evento RowDataBoundse ejecuta segun la cantidad de registros que se muestran en el GirdView es decir, si tu GridView tiene 10 filas, este evento se ejecutará 10 veces.
Y el título de las cabeceras? Pues eso es mas fácil aún, se trata de dibujar la tabla HTML dentro de las etiquetas HeaderTemplate de la tercera columna y listo!
Espero que les sea de utilidad.

1 comentario: