2010-09-29 2 views
1

J'ai le même code exécuté sur deux installations SharePoint différentes, pour parcourir les éléments d'une liste et afficher les données. Contre la première installation de SharePoint,Pourquoi ne puis-je pas accéder aux éléments d'une liste même si SPList.ItemCount est> 0?

SPList.ItemCount == SPList.Items.Count == 4.

Contre la seconde installation de SharePoint, SPList.ItemCount == 4 alors que SPList.Items.Count == 0, et la boucle foreach passant par les éléments de la liste ne fonctionne pas (car il n'y a aucun élément). (Inutile de dire que les listes sur les deux installations SP ont les mêmes éléments).

Le code J'utilise peut se résumer ainsi:

...

SPList list = web.Lists["list"]; 
SPListItemCollection itemCollection = list.Items; 

Console.WriteLine("list.ItemCount: {0}", list.ItemCount); //prints "list.ItemCount: 4" 
Console.WriteLine("list.Items.Count: {0}", list.Items.Count); //prints "list.Items.Count: 0" 

foreach (SPListItem item in itemCollection) 
{ 
    //nothing executed here, since itemCollection is empty, 
    //even though list.ItemCount is 4. 
} 

...

Quelle serait la cause de la SPList.ItemCount et la SPList.Items.Count être différent? Et, plus important encore, pourquoi ne puis-je pas parcourir les éléments de la liste, même lorsque SPList.ItemCount> 0?

Une copie de cette question apparaît sur SharePoint Overflow, mais elle n'explique pas complètement la solution.

Répondre

2

Les autorisations au niveau de l'élément peuvent empêcher le list.Items d'exposer chaque élément au contexte de l'utilisateur considéré et, par conséquent, de décompter la propriété.

+0

Dans ce cas, ce n'était pas les autorisations au niveau de l'élément, mais les autorisations de la liste elle-même - je pensais avoir activé l'accès anonyme sur la liste, mais il s'avère que non. Votre réponse m'a mis dans la bonne direction, merci! Étrange que les propriétés Count et ItemCount renvoient des valeurs différentes. –

+2

Content d'avoir aidé! Une chose que je viens d'apprendre récemment si vous rencontrez des problèmes de performance est que 'SPList.Items.GetItemById()' est beaucoup plus lent que 'SPList.GetItemById()'. Raison d'être qu'appeler la propriété 'Items' sur' SPList' * immédiatement * récupère tous les éléments de la liste, ce que vous ne voulez pas dans certains cas. –

1

La valeur de la propriété ItemCount comprend des dossiers dans une bibliothèque de documents, ainsi que des fichiers dans des sous-dossiers. La valeur de la propriété Count de la classe SPListCollection n'inclut pas les dossiers.

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.itemcount.aspx

Ma théorie est qu'il a quelque chose à voir avec les dossiers, je sais que vous avez dit qu'ils sont les mêmes installer. Êtes-vous certain que c'est le cas. Avez-vous vérifié physiquement la liste des fichiers via l'interface utilisateur ou d'autres moyens?

+0

Oui, j'ai. Les éléments sont dans la liste, accessible via allitems.aspx. Il n'y a pas de dossiers, seulement des éléments. –

Questions connexes