在sharepoint的数据列表查询中,一般都是采用CAML语言的方式来做查询,也就是平时我们用得比较多的是SPQuery.平时我们用对象模型splistitem,获取到的数据,都是列表根目录下的数据,而文件夹里面的数据,就没有包含进来,如果我们需要获取到文件夹里面的数据,以往我们都是一层层的去遍历,并且把数据添加到list中来,这种方式非常影响性能,效率也不高。
在SPQuery中,有提供了一个方法,可以非常容易的获取到文件夹里面的数据,它有个Folder以及ViewAttributes属性,也就是我们下面方法的GetItems(SPList list)
private void BindData()
{
SPWeb web = SPContext.Current.Web;
SPList list = web.Lists["我的文档"];
SPListItemCollection items = GetItems(list);
GridView1.DataSource = items.GetDataTable();
GridView1.DataBind();
}
private SPListItemCollection GetItems(SPList list)
{
SPQuery query = new SPQuery();
query.Folder = list.RootFolder; ;
query.ViewAttributes = "Scope=\"RecursiveAll\"";
SPListItemCollection itemCollection = list.GetItems(query);
return itemCollection;
}
附上一些查询参数的说明和常用的参数
o ViewAttributes
a. Scope='Default' : 只顯示指定文件夾下的項目及子文件夾
b. Scope='FilesOnly' : 只顯示指定文件夾下的項目
c. Scope='Recursive' : 顯示所有項目,不顯示文件夾
d. Scope='RecursiveAll' : 顯示所有項目和所有子文件夾
o RowLimit
返回多少條記錄
CAML语法-Query写法
元素 说明
And 并且
BeginsWith 以某字符串开始的
Contains 包含某字符串
Eq 等于
FieldRef 一个字段的引用 (在GroupBy 中使用)
Geq 大于等于
GroupBy 分组
Gt 大于
IsNotNull 非空
IsNull 空
Leq 小于等于
Lt 小于
Neq 不等于
Now 当前时间
Or 或
OrderBy 排序
Today 今天的日期
TodayIso 今天的日期(ISO格式)
Where Where子句