Déterminer Le Nombre Total D'Éléments Retournés Par La SPQuery
Je suis en cours d'exécution un certain nombre de requêtes CAML contre un grand liste dans SharePoint 2010, et afficher les résultats dans un contrôle gridview à l'utilisateur final. Je souhaite à la page dans les résultats retournés par la requête pour améliorer les performances. Cependant, je suis dans l'obligation d'afficher le nombre total des articles retournés par la requête sur la pagination de contrôle. Ma question est, comment puis-je déterminer le nombre total d'articles qui seront retournées par chaque requête sans les renvoyer tous dans un seul SPListItemCollection? Pour être plus précis, je souhaite à la page dans les résultats 10 points à la fois; comment puis-je faire cela et ont encore un nombre total de tous les éléments retournés par la requête?
Mise à jour
Jusqu'à présent, aucune des réponses données ont adressé ma question, en tant que tel, je suis en offrant une prime. J'ai besoin d'être en mesure d'obtenir un total de compter le nombre d'éléments qu'une requête CAML sera de retour, sans avoir à exécuter la requête et retourner tous les éléments. Cela va me permettre d'afficher ce nombre total de la valeur à l'utilisateur final (un ensemble), tout en feuilletant la collection d'éléments à afficher une page spécifique de résultats dans un gridview. Cela permettrait d'éviter un énorme gain de performance pour les grandes listes sur la page contenant la gridview premier chargement.
Si personne ne propose une réponse valable à la ci-dessus, je vais accepter une réponse qui donne un lien vers un article MSDN qui dit explicitement que cette fonctionnalité ne peut pas être mis en œuvre.
Merci, MagicAndi.
Tom, idée intéressante. Mais dans certains cas, j'ai besoin de le nombre total d'éléments contenus après qu'un filtre a été appliqué - d'où l'obligation de déterminer le nombre d'éléments dans une vue/CAML requête plutôt que de simplement le nombre d'éléments dans une liste.
Tom, aussi, c'est la meilleure réponse que j'ai reçu jusqu'à présent - l'ajouter en tant qu'une réponse, et si pas de meilleure réponse vient dans les prochains 6 jours, vous aurez l'50 reps. Merci.
Utilisation SVC pour obtenir le comte
https://<site>.com/<subsites>/_vti_bin/ListData.svc/<ListTitle>/$count
OriginalL'auteur MagicAndi | 2010-10-27
Vous devez vous connecter pour publier un commentaire.
Malheureusement, je ne pense pas que vous allez obtenir une réponse définitive à partir de MSDN dire ce que n'est pas possible... seulement ce est. Voici l'intégralité de la CAML Requête Schéma de la page sur le site msdn. Il n'y a aucune mention d'un quelconque type de "comte" de la fonction.
Comme pour la résolution de votre problème, vous devez d'abord choisir la bonne méthode pour trouver des articles. Par exemple, ici sont un couple de cas:
Seconde, vous pouvez mettre en œuvre une sorte de mise en cache de votre site web à réduire le temps qu'il faut pour trier/page/filtre. J'ai comme l'utilisation de la
System.Web.HttpRuntime.Cache
pour stocker unDataTable
(il est facile de changer la méthode pour récupérer les éléments lors de votre réseau peut continuer à utiliser le datatable). Vous pouvez également utiliserPage.Session
au lieu de la mise en cache.OriginalL'auteur Kit Menke
C'est un SharePoint limitation. C'est pourquoi SharePoint n'est pas de montrer comment beaucoup de pages que vous avez en vue.
Pas de fonction - pas de référence MSDN 🙂 Seuls les forums social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/...
OriginalL'auteur cement
Vous pouvez créer une vue pour cette liste d'éléments par page limitée-à-dire 10. Ensuite, utilisez un contrôle listview (au lieu de gridview) et de lier la vue.
sssreddy, non, malheureusement pas. En plus d'afficher un nombre d'articles par page, le client exige que le nombre total d'éléments dans la vue actuelle de la liste (y compris tous les critères de filtrage appliquées) est affiché dans le pager de contrôle. Il n'est pas possible de mettre à jour l'affichage de la liste de contrôle d'inclure ce nombre total d'éléments dans la vue.
Si je comprends bien droit, vous voulez compter le nombre d'éléments affichés par page. {SPList liste = web.les listes["TestList"]; SPViewCollection viewCollection = liste.Vues; stringCollection listofFieldstodisplay = new stringCollection; listofFieldtodisplay.Add("Champ1"); viewCollection.Add("NamoftheNewView",listofFieldtodisplay,CAMLQUERY, 10,true,false;} .. Maintenant sur l'INTERFACE utilisateur... { Microsoft.SharePoint.ListView myListView = null; myListView.ID = liste.ID; myListView.view = liste.vues["nameofthenewview"]; mylistview.Databind(); } ..
Comme nous l'avons mentionné 10 articles et de définir la pagination comme vrai, il sera toujours afficher seulement 10 articles par page. Litview affiche automatiquement le jeu de 10 articles, c'est l'affichage. Espérons que cela résout votre problème.
Aussi le filtrage, le tri sont traitées automaticallly
OriginalL'auteur sssreddy
Désolé il coutures CAML requête n'a pas abouti... donc encore une fois
OriginalL'auteur Artashes Kalantarian
Viens de passer quelques heures à essayer de comprendre comment faire.... Ci-dessous est une liste de choses que vous devez faire pour obtenir la liste complète comte.
1) Modifier l'affichage de la liste que vous accédez et dans les totaux COMPTER à l'une des Colonnes
2) Ajoutez le code suivant à la requête CAML au sein de votre webpart
3) Ajoutez le code suivant pour afficher le comte
Et profiter... j'ai vérifié avec et sans Filtre.
Art
OriginalL'auteur Artashes Kalantarian
Ne sais pas si nous sommes sur la même page... mais vous pouvez compter les articles reçus par SPQuery assez simple:
C'est peut-être votre solution.
OriginalL'auteur Robert Kuzma
Est possible que deux solutions, à la fois avec des limitations:
OriginalL'auteur devi
J'ai seulement trouvé un "sale" de façon totalement en dehors de tout ce pris en charge 🙂
J'ai créé une vue sur la base de données et abusé de SQL server à compter pour moi.
Totalement brisé et totalement non pris en charge et absolument aller à la morsure de moi-même, mais le seul moyen que j'ai trouvé pour obtenir un compte sur un vaste ensemble d'enregistrements.
Ne pas l'utiliser car il n'est pas sûr pour la production.
Edit: toutes les données de la liste est l'objet de dumping dans une immense table AllUserData et si vous avez le tp_listid vous pouvez créer un compte
Mais alors vous devez commencer à filtrer pour les versions si vous les utilisez
etc etc. Vous pouvez obtenir le comte et vous pouvez l'obtenir très vite, mais le pied de répondre à canon.....
OriginalL'auteur Franc Schiphorst