路人甲之碎语
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我的标签
SharePoint
(1)
分页
(1)
Paging
(1)
随笔档案
2008年7月 (1)
最新评论
1. re: SharePoint中列表数据的分页
偶都是直接webPart了.
--小牛大牛
Powered by:
博客园
模板提供:
沪江博客
博客园
|
首页
|
发新随笔
|
发新文章
|
联系
|
订阅
|
管理
SharePoint中列表数据的分页
最近在研究微软Office系列的SharePoint2007,在感受到强大定制化功能的同时,也感受到MOSS对开发者带来的一些困扰。
特别是当一个List中存有大量数据的时候,MOSS并没有提供现有的方法可以支持分页取集,Google了一下老外们的文章,居然也没有找到有用的资料。没有办法,只有自己动手!
思路还是T-SQL的思路,Select top N * From Table where ID not in (Select top M ID From Table)
下面是代码:
/**/
///
<summary>
///
根据栏目分页取新闻
///
</summary>
///
<param name="MenuId">
栏目序号
</param>
///
<param name="PageSize">
页长
</param>
///
<param name="PageNo">
页数
</param>
///
<param name="ListName">表名
</param>
///
<returns></returns>
public
SPListItemCollection GetNewsByMenuId(
int
MenuId,
uint
PageSize,
int
PageNo,
string
ListName)
{
using
(SPWeb myweb
=
SPContext.Current.Web)
{
int
MinId
=
9999999
;
//
设定最大ID初始值
string
queryStr;
if
(PageNo
>
1
)
{
queryStr
=
"
select ID From
"
+
ListName
+
"
where MenuID =
"
+
MenuId
+
"
Order By ID DESC
"
;
FriendlyQuery tempQuery
=
new
FriendlyQuery(myweb, queryStr);
tempQuery.Scope
=
FriendlyQuery.QueryScope.AllItems;
tempQuery.RowLimit
=
PageSize
*
uint
.Parse(Convert.ToString(PageNo
-
1
));
SPListItemCollection tempResult
=
tempQuery.GetItems();
if
(tempResult.Count
>
0
)
{
for
(
int
i
=
0
; i
<
tempResult.Count; i
++
)
{
if
(Int32.Parse(tempResult[i][
"
ID
"
].ToString())
<
MinId)
{
MinId
=
Int32.Parse(tempResult[i][
"
ID
"
].ToString());
}
}
}
}
queryStr
=
"
Select * From
"
+
ListName
+
"
where MenuID =
"
+
MenuId
+
"
and ID <
"
+
MinId
+
"
Order By ID DESC
"
;
FriendlyQuery query
=
new
FriendlyQuery(myweb, queryStr);
query.Scope
=
FriendlyQuery.QueryScope.AllItems;
query.RowLimit
=
PageSize;
SPListItemCollection result
=
query.GetItems();
return
result;
}
}
经测试功能是实现了,但是性能还没有进行测试。性能测试的数据稍后放出。
小弟第一次发贴,水平很烂,还望各位仁兄多指教。
Tag标签:
分页
,
Paging
,
SharePoint
发表于 2008-07-09 08:38
根号贰
阅读(972)
评论(9)
编辑
收藏
评论
#1楼
回复
引用
查看
关注中
#2楼
回复
引用
查看
@传说中的宝玉
希望写评论的时候能多写一点内容。
#3楼
回复
引用
查看
sf~我还俯卧撑呢
#4楼
回复
引用
查看
能自己动手就很不错了,不过,建议不要使用字符串组装的方式来构造查询语句的东东(如果你构造的是CAML的话,绝对会晕头的)。你中间那大段循环代码是做什么用的?找最小ID?既然排序了,想想是不是有更好的办法?
另外,你说是第一次发文,那俺给你个建议^_^:
既然这篇文章定位比较初级,那么我觉得,介绍一下FriendlyQuery会比较好,多少说说“这是谁出的”,“用来做甚”等等,是吧?
#5楼
[
楼主
]
回复
引用
查看
To:电机拖动
可以用 tempResult[tempResult.Count - 1]["ID"]的方式来取,不过之前测试的时候遇到序号会乱的情况,所以才额外写了一个循环。后来找到原因是连子目录也一起检索了,把子目录去掉就可以了。
您的提议很中肯,FriendlyQuery的全称是CollaDec FriendlyQuery,它的作用是把简单的T-SQL转换成SPQuery的形式。
#6楼
回复
引用
查看
谁说SPQuery不支持分页哦,不过我承认它的分页做得不是很好,不过在SDK里的确有一个分页的例子
你可以查看一下SDK里SPQuery.RowLimit属性里的第一个例子
还有,再查看一下SPListItemCollectionPosition 类
再着,用Microsoft.SharePoint.Search.Query.Query类也不失为一个好方法,它有一个StartRow属性,的确较为好用
#7楼
[
楼主
]
回复
引用
查看
To:风中的猪儿
SPListItemCollectionPosition我看过,它也是要依赖于一个类似于序号的参数吧。取这个序号也是要额外写代码的。
你说的Microsoft.SharePoint.Search.Query.Query类,可否提供一些更详细点的资料?
#8楼
回复
引用
哈哈,踩踩!以后多交流!嘿嘿,交流机会比较多!
#9楼
回复
引用
查看
偶都是直接webPart了.
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods
ExtJs+WCF+LINQ实现分页Grid
【翻译】Scott Mitchell的ASP.NET2.0数据指南中文版索引
在Excel中使用VBA来筛选数据
Microsoft无意泄露,欲在明年推出Office 14
微软拟2010年推新版SQL 强化商业智能功能
相关链接:
最新IT新闻:
11个处于悬崖边缘的 Web 公司
扎克博格:Facebook要先赚吆喝后赚钱
金融风暴改写富豪榜排名 巴菲特资产超盖茨
红杉资本发出严重警告:黄金时代已成历史
2008年10月11日科技博客精选