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

如果要从列表中取数据,我们可以从实例化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命名空间。
posted @ 2008-06-20 23:54  Sunmoonfire  阅读(1061)  评论(1编辑  收藏  举报