如何:从列表返回项

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

要从列表中返回项,可使用 SPList 类的任一 GetItem* 方法来获取表示特定项或所需项的子集的 SPListItemCollection 对象。下表列出了由 SPList 提供的方法。

方法

说明

GetItemById(Int32)

返回具有指定整数 ID 的列表项。

GetItemByIdAllFields(Int32)

返回具有指定整数 ID 的列表项,并包括该项目的所有字段的数据。

GetItemByIdSelectedFields(Int32, [])

返回具有指定整数 ID 的列表项,并且仅包括指定字段的值。

GetItemByUniqueId(Guid)

返回与指定全局唯一标识符 (GUID) 相关联的列表项。

GetItems()

重载。返回列表中项目的集合。

GetItemsWithUniquePermissions()

重载。返回不从列表继承安全权限,但具有唯一一组权限的列表项集合。

下面的示例返回当前网站中日历列表中的项(如果事件在指定日期后发生)。为改进性能,该示例使用 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.SharePointMicrosoft.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.SharePointMicrosoft.SharePoint.Utilities 命名空间使用 using 指令(在 Visual Basic 中为 Imports)。

请参阅

引用

Microsoft.SharePoint

概念

如何:读取列表项中字段的值

使用列表对象和集合

使用 Visual Studio 进行 SharePoint 开发

安全验证并进行发布以更新数据

特权提升