domingo, 26 de agosto de 2007

El Gridview y la Paginación

Cuando trabajamos con un gridview, una de las opciones con la que nos encontramos es permitir la paginación, es decir, que los resultados no se muestren todos seguidos, sino que se muestren en diferentes páginas. El número de páginas, dependerán del número de resultados que se muestren (mejor dicho, que le eigamos que muestre) por cada una de las páginas.

Hasta aquí podemos decir que la teoría es muy bonita y todo funciona muy bien, siempre que no queramos hacer nada que se salga un poco de lo normal... Siempre que consideremos que enlazar un gridview con un dataset o con una lista enlazada creada por nosotros se salga un poco de lo normal...

Bueno, el caso es que, cuando trabajamos con un data source de los que nos proporciona el framework de ASP.NET, como por ejemplo un ObjectDataSource, no encontramos ningún problema con la paginación, ya que simplemente tenemos que configurar un par de opciones (que el gridview permita paginación y el número de entradas que queremos que se muestren por cada página) para que todo se ajuste a lo que queremos.

Pero... y si no enlazamos con uno de los data sources que proporciona ASP.NET?? Pues bien, si, por ejemplo enlazamos el gridview con una lista enlazada o un dataset creado por nosotros, al activar la paginación nos encontraremos con un pequeño problema. Y es que, al hacer click sobre una página diferente a la que nos encontramos, obtendremos un error. Algo así:
El GridView "nombre_del_GridView" ha generado el evento PageIndexChanging, que no estaba controlado.
¿Y esto por qué? Pues bien, sencillamente porque a paginacion del control GridView viene asociado o esta intrinsecamente asociado al control proveedor de datos que se lo esta vinculando el datasource debe soportar ICollection. Aquí tenéis la explicación sobre la paginación del GridView.
Bueno, y entonces, ¿cómo lo solucionamos? Pues bien sencillo. Lo único que hay que hacer es incluir en nuestro código un método asociado al evento PageIndexChanging. De esta forma ya no nos aparecerá el error. Para que la funcionalidad sea la que queremos, pues sólo tenemos que incluir un código como este:

protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView2.PageIndex = e.NewPageIndex;
List lista = obtenerLista;
GridView2.DataSource = llista;
GridView2.DataBind();
}

NOTA: en el ejemplo véis que he incluido un método para obtener la lista que luego se enlazará al GridView. Aquí hay que obtener el datasource que queramos para el GridView.

Y ya está! Así de sencillo.
Espero que os haya servido de algo.

Un saludo!

No hay comentarios: