2010-05-27 4 views

Répondre

1

Je présume que vous recherchez des enfants directs et non des descendants (comme des éléments dans un sous-dossier).

Voulez-vous également inclure des sous-dossiers dans le nombre? Dans ce cas, vous pouvez utiliser: SPFolder.ItemCount.

Si vous voulez juste que les listItems enfants directs qui ne sont pas des sous-dossiers, vous pouvez faire quelque chose comme ce qui suit:

using (SPSite site = new SPSite(mySPSite)) 
{ 
    SPWeb web = site.OpenWeb(); 
    SPList list = web.Lists[myList]; 
    SPFolder folderInstance = list.RootFolder.SubFolders[folderUrl]; 

    SPQuery query = new SPQuery() ; 
    query.Folder = folderInstance; 

    SPListItemCollection items = list.GetItems(query) ; 

    Console.WriteLine(items.Count); 
} 

Je ne l'ai pas essayé. Vous devrez peut-être ajouter une clause where pour éliminer les dossiers, si la requête renvoie cela.

Si vous souhaitez inclure tous les éléments de liste, même dans les sous-dossiers, définissez le champ SPQuery.ViewAttributes comme query.ViewAttributes = "Scope=\"Recursive\"";

+0

Oui, j'ai besoin du nombre d'articles sans sous-dossiers. Est-il possible d'obtenir ceci sans lancer une requête? – Vijay

+0

Ne sait pas. Vous pourriez avoir un peu de chance avec SPFolder.Item.ListItems. –

+0

Non. SPFolder.Items.ListItems n'a pas aidé. J'ai utilisé votre solution car je ne pouvais pas trouver ce que je cherchais :) Merci! – Vijay

0

From Microsoft

Utilisation de la propriété SPList.ItemCount est la méthode recommandée pour récupérer le nombre d'éléments dans une liste. En tant que côté l'effet de l'optimisation de cette propriété pour performances , cependant, la propriété peut occasionnellement retourner des résultats inattendus . Par exemple, si vous avez besoin le nombre exact d'éléments, vous devez utiliser ...

Je me demande si le même pour SPFolder.ItemCount?

+0

SPFolder n'a pas de propriété ItemCount définie! – Vijay

1

Avez-vous essayé d'obtenir le SPListItem à partir de SPFolder et de vérifier les valeurs des champs SPBuiltInFieldId.ItemChildCount et SPBuiltInFieldId.FolderChildCount?

Quelque chose comme ceci:

SPFolder folder = ...; 
int? noOfItems = folder.Item[SPBuiltInFieldId.ItemChildCount] as int?; 
int? noOfFolders = folder.Item[SPBuiltInFieldId.FolderChildCount] as int?; 

Voir

SPBuiltInFieldId.ItemChildCount Field

SPBuiltInFieldId.FolderChildCount Field

pour plus d'informations.

Questions connexes