Как найти количество предметов в SPFolder? - PullRequest
2 голосов
/ 27 мая 2010

У меня есть список, в котором хранятся элементы в иерархии папок.

Я заметил, что SPFolder.Files.Count всегда ноль.

Есть ли способ узнать, сколько элементов списка в папке?

Ответы [ 3 ]

1 голос
/ 11 июня 2012

Вы пытались получить SPListItem из SPFolder и проверить значения из полей SPBuiltInFieldId.ItemChildCount и SPBuiltInFieldId.FolderChildCount?

Примерно так:

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

См

Поле SPBuiltInFieldId.ItemChildCount

Поле SPBuiltInFieldId.FolderChildCount

для получения дополнительной информации.

1 голос
/ 27 мая 2010

Полагаю, вы ищете прямых детей, а не потомков (например, элементы в подпапке).

Вы также хотите включить в подсчет подпапки? В этом случае вы можете использовать: SPFolder.ItemCount.

Если вам нужны только прямые дочерние элементы listItems, которые не являются подпапками, вы можете сделать что-то вроде следующего:

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);
}

Я не пробовал. Возможно, вам придется добавить предложение where для удаления папок, если запрос возвращает его.

Если вы хотите включить все элементы списка, даже в подпапки, установите для поля SPQuery.ViewAttributes значение query.ViewAttributes = "Scope=\"Recursive\"";

0 голосов
/ 28 мая 2010

От Microsoft

Использование свойства SPList.ItemCount рекомендуемый способ получить количество элементов в списке. Как сторона эффект настройки этого свойства для производительность, однако, свойство может иногда возвращаться неожиданно Результаты. Например, если вам требуется точное количество предметов, вы должны использовать ...

Интересно, относится ли то же самое к SPFolder.ItemCount?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...