Freigeben über


SPSiteDataQuery-Klasse

Stellt eine Abfrage, die in mehreren Listen in unterschiedlichen Websites in der gleichen Websitesammlung ausgeführt werden kann.

Vererbungshierarchie

System.Object
  Microsoft.SharePoint.SPSiteDataQuery

Namespace:  Microsoft.SharePoint
Assembly:  Microsoft.SharePoint (in Microsoft.SharePoint.dll)

Syntax

'Declaration
Public NotInheritable Class SPSiteDataQuery
'Usage
Dim instance As SPSiteDataQuery
public sealed class SPSiteDataQuery

Hinweise

Sie können eine Instanz dieser Klasse zum Abrufen von Daten aus der ausgewählten Listen oder aus allen Listen in der aktuellen Websitesammlung verwenden. Geben Sie den Bereich der Abfrage, indem die Webs -Eigenschaft festlegen. Geben Sie die Listen zur Teilnahme an der Abfrage durch Festlegen der Lists -Eigenschaft und der Felder, die durch Festlegen der ViewFields -Eigenschaft zurückgegeben. Steuerelementauswahl Daten und der Order by-die Query -Eigenschaft festlegen.

Um die Abfrage auszuführen, übergeben Sie das SPSiteDataQuery -Objekt an die GetSiteData(SPSiteDataQuery) -Methode, die ein mit Datenzeilen, die das Ergebnis der Abfrage darstellen DataTable -Objekt zurückgibt. Jede DataRow -Objekts in der Auflistung DataTable.Rows stellt ein einzelnes Element, das die Abfrage entspricht. Jede DataColumn -Objekts in der Auflistung DataTable.Columns stellt ein Feld, das in der Eigenschaft ViewFields angefordert wird, und den Namen der Spalte gleich dem Wert des Attributs Name für dieses Feld. Darüber hinaus enthält die Datentabelle eine Spalte mit dem Namen WebId, die die Website angibt, die jedes Element enthält, mit dem Namen ListId, die die Liste, die jedes Element enthält angibt, in einer Spalte und einer Spalte mit dem Namen ID, die jedes Element identifiziert.

Beispiele

Im folgende Beispiel wird ein Webpart, das alle Listen Abfragen, die mit den Kontakten erstellt wurden Listenvorlage an einer beliebigen Stelle in der Websitesammlung, ruft die ersten und letzten Namen jeder Kontakt und zeigt, die Informationen in einer GridView steuern.

Note that if you compile the example code, you can deploy the Web Part simply by copying the compiled assembly to the bin directory of the Web application. If you choose that method of deployment, be sure your project includes a reference to Microsoft.SharePoint.Security.dll. Then add the Web Part to the SafeControls list in the web.config file and elevate the Web application's trust level to WSS_Medium. For more information, see Deploying Web Parts in Windows SharePoint Services and Securing Web Parts in Windows SharePoint Services.

Achtung

Der Enumerationswert für Contacts ist 105.

Imports System
Imports System.Data
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.WebParts
Imports Microsoft.SharePoint

Public Class ContactViewer
   Inherits WebPart

   Private grid As GridView

   Protected Overrides Sub CreateChildControls()
      MyBase.CreateChildControls()

      ' Add an instance of the grid control.
      Me.grid = New GridView()
      Controls.Add(Me.grid)

   End Sub

   Protected Overrides Sub RenderContents(ByVal writer As System.Web.UI.HtmlTextWriter)

      Dim web As SPWeb = SPContext.Current.Web
      Dim query As SPSiteDataQuery = New SPSiteDataQuery()

      ' Ask for all lists created from the contacts template.
      query.Lists = "<Lists ServerTemplate='105' />"

      ' Get the Title (Last Name) and FirstName fields.
      query.ViewFields = "<FieldRef Name='Title' />" + _
                         "<FieldRef Name='FirstName' Nullable='TRUE' Type='Text'/>"
      ' Note that setting the Nullable attribute to TRUE
      ' causes an empty value to be returned for lists that
      ' do not include the FirstName column. The default is 
      ' to skip a list that does not include the column.

      ' Set the sort order.
      query.Query = "<OrderBy>" + _
                        "<FieldRef Name='Title' />" + _
                    "</OrderBy>"

      ' Query all Web sites in this site collection.
      query.Webs = "<Webs Scope='SiteCollection' />"

      Dim dt As DataTable = web.GetSiteData(query)
      Dim dv As DataView = New DataView(dt)

      ' Set up the field bindings.
      Dim boundField As BoundField = New BoundField()
      boundField.HeaderText = "Last Name"
      boundField.DataField = "Title"
      Me.grid.Columns.Add(boundField)

      boundField = New BoundField()
      boundField.HeaderText = "First Name"
      boundField.DataField = "FirstName"
      Me.grid.Columns.Add(boundField)

      Me.grid.AutoGenerateColumns = False
      Me.grid.DataSource = dv
      Me.grid.DataBind()

      Me.grid.AllowSorting = True
      Me.grid.HeaderStyle.Font.Bold = True

      Me.grid.RenderControl(writer)

   End Sub

End Class
using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;

namespace SampleWebParts
{
   public class ContactViewer : WebPart
   {
      private GridView grid;

      protected override void CreateChildControls()
      {
         base.CreateChildControls();

         // Add an instance of the grid control.
         this.grid = new GridView();
         this.Controls.Add(this.grid);
      }

      protected override void RenderContents(HtmlTextWriter writer)
      {
         SPWeb web = SPContext.Current.Web;
         SPSiteDataQuery query = new SPSiteDataQuery();

         //Ask for all lists created from the contacts template.
         query.Lists = "<Lists ServerTemplate=\"105\" />";

         // Get the Title (Last Name) and FirstName fields.
         query.ViewFields = "<FieldRef Name=\"Title\" />" +
                            "<FieldRef Name=\"FirstName\" Nullable=\"TRUE\" Type=\"Text\"/>";
        // Note that setting the Nullable attribute to TRUE
        // causes an empty value to be returned for lists that
        // do not include the FirstName column. The default is 
        // to skip a list that does not include the column.

         // Set the sort order.
         query.Query = "<OrderBy>" + 
                           "<FieldRef Name=\"Title\" />" + 
                       "</OrderBy>";

         // Query all Web sites in this site collection.
         query.Webs = "<Webs Scope=\"SiteCollection\" />";

         DataTable dt = web.GetSiteData(query);
         DataView dv = new DataView(dt);

         // Set up the field bindings.
         BoundField boundField = new BoundField();
         boundField.HeaderText = "Last Name";
         boundField.DataField = "Title";
         this.grid.Columns.Add(boundField);

         boundField = new BoundField();
         boundField.HeaderText = "First Name";
         boundField.DataField = "FirstName";
         this.grid.Columns.Add(boundField);

         this.grid.AutoGenerateColumns = false;
         this.grid.DataSource = dv;
         this.grid.DataBind();

         this.grid.AllowSorting = true;
         this.grid.HeaderStyle.Font.Bold = true;

         this.grid.RenderControl(writer);
      }
   }
}

Threadsicherheit

Alle öffentlichen static (Shared in Visual Basic) Member dieses Typs sind threadsicher. Die Threadsicherheit von Instanzmembern ist nicht gewährleistet.

Siehe auch

Referenz

SPSiteDataQuery-Member

Microsoft.SharePoint-Namespace