您的位置:首页 > 其它

WSS3SDK之:如何从列表中获取数据

2009-01-17 18:11 453 查看
如果要从列表中取数据,我们可以从实例化SPWeb开始深入,通过对象模型得到列表的SPListItemCollection。您返回后,当我们得到所有列表项目的集合后,可以通过迭代遍历整个集合,并使用索引(indexer)返回特定字段(或叫做栏,field)的值。

下面的例子返回指定事件列表的所有项。它假定存在一个文本框,可以用来输入事件列表的名称。

VB

Dim mySite As SPWeb = SPContext.Current.Web

Dim listItems As SPListItemCollection = mySite.Lists(TextBox1.Text).Items

Dim i As Integer

For i = 0 To listItems.Count - 1

Dim item As SPListItem = listItems(i)

Response.Write(SPEncode.HtmlEncode(item("Title").ToString()) & " :: " _

& SPEncode.HtmlEncode(item("Location").ToString()) & " :: " _

& SPEncode.HtmlEncode(item("Begin").ToString()) & " :: " _

& SPEncode.HtmlEncode(item("End").ToString()) & "<BR>")

Next i

C#

SPWeb mySite = SPContext.Current.Web;

SPListItemCollection listItems = mySite.Lists[TextBox1.Text].Items;

for (int i=0;i<listItems.Count;i++)

{

SPListItem item = listItems[i];

Response.Write(SPEncode.HtmlEncode(item["Title"].ToString()) + " : " +

SPEncode.HtmlEncode(item["Location"].ToString()) + " : " +

SPEncode.HtmlEncode(item["Begin"].ToString()) + " : " +

SPEncode.HtmlEncode(item["End"].ToString()) + "<BR>");

}

上面的例子需要引用Microsoft.SharePoint和Microsoft.SharePoint.Utilities命名空间。

在例子中,索引既用在返回用户指定的列表,又用于返回列表中特定的项。为了返回该项目, indexers必须指定每一栏的名称,来得到对应栏的值。在本例中,所有的栏名称来自一个普通的事件列表。

您也可以使用SPList类的GetItems方法返回的某列表的数据项的一个子集。下面的例子只返回Stock栏的值超过100 的标题栏的内容。

VB

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

C#

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>");

}

上面的例子需要引用Microsoft.SharePoint和Microsoft.SharePoint.Utilities命名空间。

该例子假设存在一个Books列表,包含了一个名为Stock的列,类型为数值。

前面的示例使用构造器实例化了一个SPQuery对象。然后为query对象的Query属性指定了一个协同应用标记语言核心架构(CAML,Collaborative Application Markup Language Core Schemas)格式的字符串,指定query的XML内容(换句话说,就是Where元素)。然后,query对象将传递给在GetItems方法,来返回和显示列表项。

跨列表查询



您可以执行跨列表查询来使查询更有效率,跨越多个网站获取数据。以下示例使用SPSiteDataQuery类来定义查询,然后使用GetSiteData方法返回所有Status栏的值等于“Completed” 的列表项。

VB

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

C#

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命名空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: