【问题标题】:Why can't I access the items in a List even if the SPList.ItemCount is > 0?为什么即使 SPList.ItemCount > 0 我也无法访问 List 中的项目?
【发布时间】:2010-09-29 15:49:31
【问题描述】:

我在两个不同的 SharePoint 安装上运行相同的代码,以遍历列表中的项目并显示数据。针对第一个 SharePoint 安装,

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

对于第二个 SharePoint 安装,SPList.ItemCount == 4 而 SPList.Items.Count == 0,并且遍历列表项目的 foreach 循环不起作用(因为没有任何项目)。 (不用说,两个 SP 安装上的列表具有相同的项目)。

我使用的代码可以总结如下:

...

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.
}

...

什么会导致 SPList.ItemCount 和 SPList.Items.Count 不同?而且,更重要的是,为什么我不能遍历列表中的项目,即使 SPList.ItemCount > 0 ?

SharePoint Overflow 上出现了此问题的副本,但它并没有完全解释解决方案。

【问题讨论】:

    标签: sharepoint sharepoint-2007


    【解决方案1】:

    项目级权限可能会阻止 list.Items 将每个项目暴露给正在考虑的用户上下文,因此,该属性会被计算在内。

    【讨论】:

    • 在这种情况下,不是项目级权限,而是列表权限本身——我以为我在列表上启用了匿名访问,但事实证明我没有。您的回答使我朝着正确的方向前进,谢谢!奇怪的是 Count 和 ItemCount 属性返回不同的值。
    • 很高兴能帮上忙!如果您遇到性能问题,我最近学到的一件事是SPList.Items.GetItemById()SPList.GetItemById() 慢得多。原因是调用SPList 上的Items 属性立即 会获取列表中的所有项目,在某些情况下您不希望这样做。
    【解决方案2】:

    ItemCount 属性的值包括文档库中的文件夹以及子文件夹中的文件。 SPListCollection 类的 Count 属性的值不包括文件夹。

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

    我的理论是它与文件夹有关,我知道你说它们是相同的安装。你确定是这样吗?您是否通过 UI 或其他方式实际检查了文件列表?

    【讨论】:

    • 是的,我有。这些项目在列表中,通过 allitems.aspx 访问。没有文件夹,只有项目。
    猜你喜欢
    • 1970-01-01
    • 2019-10-19
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2021-05-14
    • 2022-08-05
    相关资源
    最近更新 更多