2009-02-19 9 views
11

J'essaie de comprendre la mécanique de pagination GridView d'ASP.NET afin que je puisse utiliser la fonctionnalité native du framework au lieu des routines de pagination manuelles maison de mon entreprise qui demandent beaucoup de travail à implémenter.Définition manuelle d'un PageCount GridView lorsque DataSource ne renvoie pas le jeu de résultats complet?

J'ai tout compris sauf comment faire pour que la propriété PageCount de GridView fonctionne avec nos services Web. À l'heure actuelle, nos services Web renvoient le nombre total d'enregistrements comme ce qui suit:

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

Cela fonctionne très bien avec un GridView, mais la documentation que j'ai trouvé dit que la propriété de PageCountGrideView est généré à partir des enregistrements au total la source de données. Est-ce qu'il n'y a vraiment aucun moyen de définir le PageCount basé sur autre chose que de retourner tous les enregistrements?

Il peut y avoir des dizaines de milliers d'enregistrements dans ma source de données. Je préfère ne pas tous les sélectionner pour que le comptage des pages de GridView fonctionne. Je pourrais probablement simplement ignorer le nombre de pages de GridView et le calculer moi-même, mais si le framework a un moyen de le faire, je préfère l'utiliser.

+0

Avez-vous essayé les réponses? – eglasius

Répondre

8

Je recommande fortement que vous allez la route ObjectDataSource.

Si vous n'êtes pas familier avec cette approche voici les bases:

1) Au lieu de régler manuellement la propriété grid.DataSource dans le code derrière, vous ajoutez un élément supplémentaire à la page. Vous définissez le DataSourceID de la grille à l'ID de votre ObjectDataSource.

2) C'est là que vous obtenez un réel contrôle. Vous créez une nouvelle classe et lui donne deux fonctions "SelectRows()" et "GetCount()". Vous pouvez mettre votre logique dans les deux fonctions et optimiser au contenu de votre coeur. N'hésitez pas à utiliser les services Web si c'est ce dont vous avez besoin, mais avec cette méthode, vous pouvez en appeler un pour renvoyer des lignes et d'autres pour renvoyer le nombre. 3) utiliser l'éditeur de propriété de ObjectDataSource pour le connecter à votre classe et activer la pagination. Vous êtes tous ensemble!

Je vous suggère fortement de vérifier The Code Project's Example of using ObjectDataSource and GridView car il s'agit clairement de la manière prévue pour soutenir ce que vous voulez.

Bonne chance!

5

Vous devez définir AllowCustomPaging = "true". Et quand databinding do:

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

Mise à jour 1: Au-dessus est pour DataGrid seulement. Malheureusement, la seule façon de faire du paging côté serveur avec gridview est de mettre en œuvre une source de données d'objet ou d'implémenter une source de données personnalisée. Voici le document msdn associé http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx.

Mise à jour 2: Cette méthode fonctionne maintenant avec GridView comme .Net 4.5

+1

VirtualItemCount ne fonctionne qu'avec les contrôles DataGrid. Sur un GridView, cette propriété n'existe pas, sinon je l'utiliserais. –

+1

@Dan vous avez raison, j'ai ajouté une mise à jour à ce sujet - fondamentalement, vous êtes obligé d'aller avec l'objectdatasource ou une source de données personnalisée. Ajout d'un lien vers le document msdn. – eglasius

+3

Cette propriété semble exister sur GridView à 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

Questions connexes