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!

19 comentarios:

Anónimo dijo...

ageague el codigo del evento escribiendolo pero no me funciona me sigue dando el mismo error

Anónimo dijo...

No me funciona, copie el codigo del evento por que no sabia como sacarlo y cambie la fuente de datos pero me sigue dando el error

Anónimo dijo...

no funciona el codigo, aun asi me sigue dando el mismo error, el evento no es reconocido al darle click

@kbraian dijo...

Justo lo que necesitaba,
gracias.
karim

Anónimo dijo...

gracias!!!
lo necesitaba en vb
pero simplemente lo modifique
y funciono perfecto

gracias por compartir este codigo
me ayudo bastante

Nemesis Bow dijo...
Este comentario ha sido eliminado por el autor.
Nemesis Bow dijo...

A que te refieres con obtener lista, no comprendo lo que tratas de decir

Unknown dijo...

GRACIAS POR EL CÒDIGO, ME FUE DE MUCHA AYUDA...

Neggro dijo...

Funciono perfecto, muchas gracias!!!
Simple, concreto y funcional, no siempre se encuentra algo asi, gracias de nuevo y saludos desde Uruguay!!!

Anónimo dijo...

YO NECESITO EL CODIGO PARA PODER CREAR PAGINACION EN UN GRIDVIEW, SOLO QUE NO UTILIZO UN SQLDATASOURCE UTILIZO CON CONECTOR ODBC PARA LLENAR EL GRIDVIEW MUCHAS GRACIAS POR SU AYUDA

Anónimo dijo...

Anduvo PERFECTAMENTE!! me saco de un gran problema! y a los que no les anda sean felices =)

Zodiaco dijo...

Funciona perfecto!. Gracias.

Anónimo dijo...

Muchas gracias me funciona de maravilla. Visca el Barca! XD

Anónimo dijo...

Gracias, me srivio mucho

Anónimo dijo...

Donde puedo obtener el ejemplo, para ver la funcion que crea para utilizarla en lo de la paginacion del gridview..!

Anónimo dijo...
Este comentario ha sido eliminado por el autor.
MrCadillaC dijo...

bueno, pero esta cargando toda la lista... como pargar parcialmente, quiero decir lo que se muestra en la pagina y aun decirle que faltan n paginas por mostrar

Ismael DJ dijo...

sencillo pero eficaz,slds.

Anónimo dijo...

Excelente ejemplo muy bueno gracias!!