c# - ¿Configurar manualmente un PageCount de GridView cuando DataSource no devuelve el conjunto de resultados completo?
asp.net-2.0 (2)
Estoy tratando de descubrir la mecánica de paginación GridView
de ASP.NET para poder utilizar la funcionalidad nativa del framework en lugar de las rutinas de paginación manual elaboradas en casa de mi compañía, que requieren mucho trabajo para implementar.
He descubierto todo, excepto cómo hacer que la propiedad PageCount de GridView
funcione con nuestros servicios web. Actualmente, nuestros servicios web devuelven el recuento total de registros de la siguiente manera:
public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords)
Esto funciona bien con un GridView, sin embargo, la documentación que he encontrado dice que la propiedad PageCount
se genera a partir de los registros totales en el DataSource. ¿Realmente no hay forma de configurar el PageCount basándose en otra cosa que no sea devolver todos los registros?
Podría haber decenas de miles de registros en mi fuente de datos, así que prefiero no seleccionarlos todos para que funcione el recuento de páginas de GridView. Probablemente podría ignorar el recuento de páginas de GridView y calcularlo solo, pero si el marco tiene una forma de hacerlo, prefiero usarlo.
Recomiendo encarecidamente que vaya a la ruta ObjectDataSource.
Si no está familiarizado con este enfoque, aquí están los conceptos básicos:
1) En lugar de configurar manualmente la propiedad grid.DataSource en el código subyacente, agrega un elemento adicional a la página. Establece el DataSourceID de la grilla en la identificación de su ObjectDataSource.
2) Aquí es donde obtienes un control real. Usted crea una nueva clase y le da dos funciones "SelectRows ()" y "GetCount ()". Puede poner su lógica en ambas funciones y optimizar al contenido de su corazón. Siéntase libre de usar servicios web si eso es lo que necesita para trabajar, pero bajo este método, puede llamar a uno para devolver filas y otro para devolver el conteo.
3) use el editor de propiedades de ObjectDataSource para conectarlo a su clase y habilitar la búsqueda. ¡Estás listo!
Recomiendo encarecidamente que consulte el ejemplo de The Code Project sobre el uso de ObjectDataSource y GridView, ya que esta es claramente la forma prevista de respaldar lo que desea.
¡Buena suerte!
Debe configurar AllowCustomPaging = "true". Y cuando se usan enlaces de datos:
mygrid.VirtualItemCount = totalRecords;
mygrid.DataSource = mysource;
mygrid.DataBind();
Actualización 1: arriba es solo para la cuadrícula de datos. Desafortunadamente, la única forma admitida de realizar paginación del lado del servidor con gridview es implementar un origen de datos de objeto o implementar un origen de datos personalizado. Aquí está el documento msdn relacionado http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx .
Actualización 2: este método ahora funciona con GridView a partir de .Net 4.5