2009-02-19 18 views
11

Estoy tratando de averiguar la mecánica de paginación GridView de ASP.NET para que pueda 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.¿Configura manualmente un PageCount de GridView cuando DataSource no devuelve el conjunto de resultados completo?

He descubierto todo excepto cómo obtener la propiedad PageCount de GridView para trabajar con nuestros servicios web. Actualmente, nuestros servicios web devuelven el recuento total de disco como la siguiente:

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 PageCount propiedad del GrideView 's 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.

+0

¿Has probado la respuesta? – eglasius

Respuesta

8

le recomiendo que vas a la ruta ObjectDataSource.

Si no está familiarizado con este enfoque aquí están los fundamentos:

1) En lugar de establecer manualmente la propiedad grid.DataSource en el código detrás, se añade un elemento extra a la página. Establece el DataSourceID de la grilla en la identificación de su ObjectDataSource.

2) Aquí es donde obtiene 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) utilice el editor de propiedades de ObjectDataSource para conectarlo a su clase y habilitar la búsqueda. ¡Estás listo!

Le sugiero que revise The Code Project's Example of using ObjectDataSource and GridView ya que esta es claramente la forma prevista para apoyar lo que desea.

¡Buena suerte!

5

Tienes que establecer AllowCustomPaging = "true". Y cuando enlace de datos de tareas:

mygrid.VirtualItemCount = totalRecords; 
mygrid.DataSource = mysource; 
mygrid.DataBind(); 

Actualización 1: pagina es de 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 trabaja con GridView como de .Net 4.5

+1

VirtualItemCount solo funciona con controles DataGrid. En un GridView, esta propiedad no existe, de lo contrario lo usaría. –

+1

@Dan tiene razón, agregué una actualización al respecto; básicamente, está forzado a usar el origen de datos del objeto o un origen de datos personalizado. Se agregó un enlace al documento msdn. – eglasius

+3

Esta propiedad parece existir en GridView a partir de .Net 4.5 [msdn] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.virtualitemcount% 28v = vs.110% 29.aspx) – sparebytes

Cuestiones relacionadas