如何:从列表返回项
上次修改时间: 2015年3月9日
适用范围: SharePoint Foundation 2010
要从列表中返回项,可使用 SPList 类的任一 GetItem* 方法来获取表示特定项或所需项的子集的 SPListItemCollection 对象。下表列出了由 SPList 提供的方法。
方法 |
说明 |
---|---|
返回具有指定整数 ID 的列表项。 |
|
返回具有指定整数 ID 的列表项,并包括该项目的所有字段的数据。 |
|
返回具有指定整数 ID 的列表项,并且仅包括指定字段的值。 |
|
返回与指定全局唯一标识符 (GUID) 相关联的列表项。 |
|
重载。返回列表中项目的集合。 |
|
重载。返回不从列表继承安全权限,但具有唯一一组权限的列表项集合。 |
下面的示例返回当前网站中日历列表中的项(如果事件在指定日期后发生)。为改进性能,该示例使用 GetItems(SPQuery) 方法将查询范围缩小到有限的一组项目。该示例使用构造函数来实例化 SPQuery 对象,然后为查询对象的 Query 属性分配协作应用程序标记语言 (CAML) 中的一个字符串,该字符串指定用于查询的内部 XML(即,<Where> 元素)。设置 Query 属性之后,会将查询对象传递给 GetItems 方法以返回并显示项。
Dim listTitle As String = TextBox1.Text
Dim mySite As SPWeb = SPContext.Current.Web
Dim myList As SPList = mySite.Lists(listTitle)
Dim myQuery As New SPQuery()
myQuery.Query = "<Where><Geq><FieldRef Name = ""EventDate""/>" & _
"<Value Type = ""DateTime"">2010-06-01</Value></Geq></Where>"
Dim myItems As SPListItemCollection = myList.GetItems(myQuery)
For i As Integer = 0 To myItems.Count - 1
Dim item As SPListItem = myItems(i)
Label1.Text += SPEncode.HtmlEncode(item("Title").ToString()) & _
SPEncode.HtmlEncode(item("Start Time").ToString()) & _
SPEncode.HtmlEncode(item("End Time").ToString()) & "<BR>"
Next
string listTitle = TextBox1.Text;
SPWeb mySite = SPContext.Current.Web;
SPList myList = mySite.Lists[listTitle];
SPQuery myQuery = new SPQuery();
myQuery.Query = "<Where><Geq><FieldRef Name = \"EventDate\"/>" +
"<Value Type = \"DateTime\">2010-06-01</Value></Geq></Where>";
SPListItemCollection myItems = myList.GetItems(myQuery);
for (int i = 0; i < myItems.Count; i++)
{
SPListItem item = myItems[i];
Label1.Text += SPEncode.HtmlEncode(item["Title"].ToString()) + " : " +
SPEncode.HtmlEncode(item["Start Time"].ToString()) + " : " +
SPEncode.HtmlEncode(item["End Time"].ToString()) + "<BR>";
}
上面的示例假定存在一个可用于键入列表名称的文本框,和一个用于显示返回的项目的标签。索引器用于返回用户键入的列表以及枚举项集合。为使用各个项,可使用索引器来指定要从中检索值的列的名称。在此情形下,指定的字段名称属于标准 SharePoint Foundation 日历列表。
![]() |
---|
注意,该示例将由 Items 属性返回的项集合分配给 SPListItemCollection 对象,然后,后者将在循环中枚举(而不是正在枚举)myList.Items[i]。这样可改进性能,因为如果没有此逻辑,则循环会在每次迭代时重新创建整个项集合。 |
下面的示例仅返回 Stock 列值超过 100 时的 Title 列值。
Dim mySite As SPWeb = SPContext.Current.Web
Dim list As SPList = mySite.Lists("Books")
Dim query As New SPQuery()
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>"
Dim myItems As SPListItemCollection = list.GetItems(query)
Dim item As SPListItem
For Each item In myItems
Response.Write(SPEncode.HtmlEncode(item("Title").ToString()) & "<BR>")
Next item
SPWeb mySite = SPContext.Current.Web;
SPList list = mySite.Lists["Books"];
SPQuery query = new SPQuery();
query.Query = "<Where><Gt><FieldRef Name='Stock'/><Value Type='Number'>100</Value></Gt></Where>";
SPListItemCollection myItems = list.GetItems(query);
foreach (SPListItem item in myItems)
{
Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}
该示例假定存在一个 Books 列表,该列表具有一个包含数值的 Stock 列。
备注
上面的示例要求对 Microsoft.SharePoint 和 Microsoft.SharePoint.Utilities 命名空间使用 using 指令(在 Visual Basic 中为 Imports)。
跨列表查询
可以执行跨列表查询以便更有效地跨多个网站查询数据。下面的示例使用 SPSiteDataQuery 类定义查询,然后使用 GetSiteData 方法返回标准 SharePoint Foundation 任务列表(由 ServerTemplate = "107" 指定,且其中的 Status 列等于"已完成")中的项。要查看 SharePoint Foundation 服务器模板列表,请参阅 SPListTemplateType。
Dim webSite As SPWeb = SPContext.Current.Web
Dim query As New SPSiteDataQuery()
query.Lists = "<Lists ServerTemplate=""107"" />"
query.Query = "<Where><Eq><FieldRef Name=""Status""/>" &
"<Value Type=""Text"">Completed</Value></Eq></Where>"
Dim items As System.Data.DataTable = webSite.GetSiteData(query)
Dim item As System.Data.DataRow
For Each item In items
Response.Write((SPEncode.HtmlEncode(item("Title").ToString()) + "<BR>"))
Next item
SPWeb webSite = SPContext.Current.Web;
SPSiteDataQuery query = new SPSiteDataQuery();
query.Lists = "<Lists ServerTemplate=\"107\" />";
query.Query =
"<Where><Eq><FieldRef Name=\"Status\"/>" +
"<Value Type=\"Text\">Completed</Value></Eq></Where>";
System.Data.DataTable items = webSite.GetSiteData(query);
foreach (System.Data.DataRow item in items)
{
Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + "<BR>");
}
此示例要求对 Microsoft.SharePoint 和 Microsoft.SharePoint.Utilities 命名空间使用 using 指令(在 Visual Basic 中为 Imports)。