我正在针对SharePoint 2010中的大型列表运行多个CAML查询,并将结果以网格视图的形式显示给最终用户。我希望翻阅查询返回的结果以提高性能。但是,我需要在分页控件上显示查询返回的项目总数。我的问题是,如何确定每个查询将返回的项目总数,而不是在单个SPListItemCollection中实际返回它们?确切地说,我希望一次翻阅结果10个项目;我怎么能这样做,仍然有查询返回的所有项目的总数?
更新
到目前为止,所给出的答案都没有解决我的问题 - 因此,我正在提供赏金。我需要能够获得CAML查询将返回的项目总数,而无需运行查询并返回所有项目。这将使我能够向最终用户显示此总计数值(设置要求),同时在项目集合中进行分页以在网格视图中显示特定的结果页面。这将避免包含gridview首次加载的页面上的大型列表的大量性能损失。
如果没有人提供上述内容的有效答案,我将接受一个答案,该答案提供指向MSDN文章的链接,该文章明确指出无法实现上述功能。
谢谢,MagicAndi。
答案 0 :(得分:7)
答案 1 :(得分:2)
这是SharePoint的限制。这就是为什么SharePoint不显示您在视图中有多少页面。
答案 2 :(得分:2)
您可以为该列表创建一个视图,每页的项数限制为10.然后使用listview控件(而不是gridview)并绑定视图。
答案 3 :(得分:2)
对不起它接缝CAML查询没有通过......所以再次
<Aggregations Value="On">
<FieldRef Name="LinkTitle" Type="COUNT"/>
</Aggregations>
答案 4 :(得分:1)
花了几个小时试图弄清楚如何做到这一点....下面列出了为了获得完整列表而需要做的事情。
1)修改您正在访问的列表视图,并在总计中将COUNT添加到其中一列
2)将以下代码添加到webpart中的CAML查询中
3)添加以下代码以显示计数
<xsl:value-of select="/dsQueryResponse/Rows/Row/@*[name()='YOUR_COLUMN_NAME_FROM_FIRST_STEP.COUNT']"/>
并且享受......我已经使用过滤器检查过它。
技术
答案 5 :(得分:0)
不知道我们是否在同一页面上...但您可以非常简单地计算SPQuery收到的项目:
SPQuery query = new SPQuery();
query.Query = string.Concat(
"<Where><Eq>",
"<FieldRef Name='Status'/>",
"<Value Type='CHOICE'>Not Started</Value>",
"</Eq></Where>",
"<OrderBy>",
"<FieldRef Name='DueDate' Ascending='TRUE' />",
"<FieldRef Name=’Priority’ Ascending='TRUE' />",
"</OrderBy>");
SPListItemCollection items = list.GetItems(query);
double totalCount = items.Count;
也许这是你的解决方案。
答案 6 :(得分:0)
可能有两种解决方案,都有局限性:
答案 7 :(得分:0)
我只找到了一个&#34;脏&#34;完全不受任何支持的方式:) 我已经在数据库上创建了一个视图,并且滥用了SQL服务器来为我计算。 完全破碎,完全没有支持,绝对会咬自己,但我发现的唯一方法是计算大量的记录。 没有使用它,因为它不适合生产。
编辑:所有列表数据都被转储到一个巨大的表AllUserData中,如果你有tp_listid,你可以创建一个计数
SELECT COUNT(nvarchar7) AS Expr1
FROM dbo.AllUserData
WHERE (tp_ListId = 'xxxxxxxx-9999-3333-7777-yyyyyyyyyyyy')
但是如果你使用它们,你必须开始过滤版本
WHERE (tp_Version =
(SELECT MAX(tp_Version) AS ex1
FROM {{view above}} AS V1
WHERE (key = M.key)))
等等你可以得到计数,你可以很快得到它,但脚会见枪......