2009-02-19 7 views
11

che sto cercando di capire GridView meccanica impaginazione di ASP.NET in modo da poter utilizzare la funzionalità nativa del quadro invece di fatta in casa routine di impaginazione manuale della mia azienda, che prendono un sacco di lavori di realizzazione.Impostazione manuale di un PageCount di GridView quando DataSource non restituisce il set di risultati completo?

Ho capito tutto, tranne che come ottenere la proprietà PageCount s' il GridView a lavorare con i nostri servizi web. Attualmente, i nostri servizi web restituiscono il numero totale record di simile al seguente:

public object[] GetStuffMethod(int pageNum, int recordsPerPage, out int totalRecords) 

Questo funziona bene con un GridView, tuttavia la documentazione che ho trovato dice che PageCount proprietà s' il GrideView è generato dal totale dei record in il DataSource. Non c'è davvero modo di impostare il PageCount basandosi su qualcos'altro oltre a restituire tutti i record?

Ci potrebbero essere decine di migliaia di record nella mia fonte di dati in modo da preferirei non selezionare tutti loro solo per far funzionare il numero di pagine di GridView. Probabilmente potrei semplicemente ignorare il conteggio delle pagine di GridView e calcolarlo da solo, ma se il framework ha un modo per farlo, preferirei usarlo.

+0

hai provato le risposte? – eglasius

risposta

8

mi consiglia vivamente che si va via ObjectDataSource.

Se avete poca dimestichezza con questo approccio qui sono i principi fondamentali:

1) Invece di impostare manualmente la proprietà grid.DataSource nel codice dietro, si aggiunge un elemento in più per la pagina. Si imposta il DataSourceID della griglia sull'ID di ObjectDataSource.

2) Qui è dove si ottiene il controllo reale. Si crea una nuova classe e le si assegnano due funzioni "SelectRows()" e "GetCount()". Puoi mettere la tua logica in entrambe le funzioni e ottimizzare a tuo piacimento. Sentiti libero di usare i servizi web se è quello con cui devi lavorare, ma con questo metodo, puoi chiamarne uno per restituire le righe e altro per restituire il conteggio.

3) utilizzare editor di proprietà del ObjectDataSource per collegarlo alla classe e abilitare il paging. Sei tutto pronto!

vi consiglio caldamente di controllare il The Code Project's Example of using ObjectDataSource and GridView come questo è chiaramente il modo destinato a sostenere ciò che si desidera.

Buona fortuna!

5

è necessario impostare AllowCustomPaging = "true". E quando l'associazione dati do:

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

Update 1: Sopra è solo per datagrid. Sfortunatamente l'unico modo supportato per eseguire il paging lato server con gridview è l'implementazione di un'origine dati dell'oggetto o l'implementazione di un'origine dati personalizzata. Ecco il documento msdn correlato http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx.

Update 2: Questo metodo ora funziona con GridView come di .Net 4.5

+1

VirtualItemCount funziona solo con i controlli DataGrid. Su una GridView, questa proprietà non esiste, altrimenti la userei. –

+1

@Se sei corretto, ho aggiunto un aggiornamento su di esso - in pratica sei costretto ad andare con objectdatasource o un'origine dati personalizzata. Aggiunto un link al msdn doc. – eglasius

+3

Questa proprietà sembra esistere su GridView da .Net 4.5 [msdn] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.virtualitemcount% 28v = vs.110% 29.aspx) – sparebytes

Problemi correlati