Freigeben über


Vorgehensweise: Binden von Daten mit einer Projektdatenquelle (WCF Data Services)

Sie können Datenquellen erstellen, die auf den generierten Datenobjekten in einer WCF Data Services-Clientanwendung basieren. Wenn Sie einem Datendienst einen Verweis mit dem Dialogfeld Dienstverweis hinzufügen hinzufügen, wird mit den generierten Clientdatenklassen eine Projektdatenquelle erstellt. Eine Datenquelle wird für jede Entitätenmenge erstellt, die der Datendienst verfügbar macht. Sie können Formulare zum Anzeigen von Daten aus dem Dienst erstellen, indem Sie diese Datenquellenelemente aus dem Fenster Datenquellen auf den Designer ziehen. Diese Elemente werden zu Steuerelementen, die an die Datenquelle gebunden sind. Während der Ausführung wird diese Datenquelle an eine Instanz der DataServiceCollection<T>-Klasse gebunden, die mit von einer Abfrage an den Datendienst zurückgegebenen Objekten gefüllt ist. Weitere Informationen finden Sie unter Binden von Daten an Steuerelemente (WCF Data Services).

In den Beispielen in diesem Thema werden der Northwind-Beispieldatendienst und automatisch generierte Clientdatendienstklassen verwendet. Dieser Dienst und die Clientdatenklassen werden erstellt, wenn Sie den WCF Data Services-Schnellstart ausführen.

So verwenden Sie eine Projektdatenquelle in einem WPF-Fenster

  1. Fügen Sie in einem WPF-Projekt dem Northwind-Datendienst einen Verweis hinzu. Weitere Informationen finden Sie unter Gewusst wie: Hinzufügen eines Datendienstverweises (WCF Data Services).

  2. Erweitern Sie im Fenster Datenquellen den Knoten Customers in der Projektdatenquelle NorthwindEntities.

  3. Klicken Sie auf das CustomerID-Element, wählen Sie ComboBox aus der Liste aus, und ziehen Sie das CustomerID-Element aus dem Knoten Customers auf den Designer.

    Die folgenden Objektelemente in der XAML-Datei für das Fenster werden erstellt:

  4. Ziehen Sie die Orders-Navigationseigenschaft auf den Designer.

    Die folgenden zusätzlichen Objektelemente in der XAML-Datei für das Fenster werden erstellt:

    • Ein zweites CollectionViewSource-Element mit dem Namen customersOrdersViewSource und der customerViewSource.

    • Ein datengebundenes DataGrid-Steuerelement mit dem Namen ordersDataGrid.

  5. (Optional) Ziehen Sie zusätzliche Elemente aus dem Knoten Customers auf den Designer.

  6. Öffnen Sie die Codepage für das Formular, und fügen Sie die folgenden using-Anweisungen (Imports in Visual Basic) hinzu:

    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. Fügen Sie in der partiellen Klasse, die das Formular definiert, den folgenden Code hinzu, mit dem eine ObjectContext-Instanz erstellt wird und die customerID-Konstante definiert wird.

    Private context As NorthwindEntities
    Private customersViewSource As CollectionViewSource
    Private trackedCustomers As DataServiceCollection(Of Customer)
    Private Const customerCountry As String = "Germany"
    Private Const svcUri As String = "https://localhost:12345/Northwind.svc/"
    
    private NorthwindEntities context;
    private CollectionViewSource customersViewSource;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "https://localhost:12345/Northwind.svc/";
    
  8. Wählen Sie im Designer das Fenster aus.

    Hinweis

    Stellen Sie sicher, dass Sie das Fenster selbst und nicht Inhalt auszuwählen, der sich innerhalb des Fensters befindet.Wenn das Fenster ausgewählt wird, sollte das Textfeld Name im oberen Bereich des Fensters Eigenschaften den Namen des Fensters enthalten.

  9. Klicken Sie im Fenster Eigenschaften auf die Schaltfläche Ereignisse.

  10. Suchen Sie das Loaded-Ereignis, und doppelklicken Sie auf die Dropdownliste neben diesem Ereignis.

    Visual Studio öffnet die Code-Behind-Datei für das Fenster und generiert einen Loaded-Ereignishandler.

  11. Kopieren Sie den folgenden Code und fügen Sie ihn in den neu erstellten Loaded-Ereignishandler ein.

    ' Initialize the context for the data service.
    context = New NorthwindEntities(New Uri(svcUri))
    
    ' Create a LINQ query that returns customers with related orders.
    Dim customerQuery = From cust In context.Customers.Expand("Orders") _
                             Where cust.Country = customerCountry _
                             Select cust
    
    ' Create a new collection for binding based on the LINQ query.
    trackedCustomers = New DataServiceCollection(Of Customer)(customerQuery)
    
        try
            ' Get the customersViewSource resource and set the binding to the collection.
        customersViewSource = _
            CType(Me.FindResource("customersViewSource"), CollectionViewSource)
        customersViewSource.Source = trackedCustomers
        customersViewSource.View.MoveCurrentToFirst()
    Catch ex As DataServiceQueryException
        MessageBox.Show("The query could not be completed:\n" + ex.ToString())
    Catch ex As InvalidOperationException
        MessageBox.Show("The following error occurred:\n" + ex.ToString())
    End Try
    
    // Initialize the context for the data service.
    context = new NorthwindEntities(new Uri(svcUri));
    
    // Create a LINQ query that returns customers with related orders.
    var  customerQuery = from cust in context.Customers.Expand("Orders")
                         where cust.Country == customerCountry
                         select cust;
    
    // Create a new collection for binding based on the LINQ query.
    trackedCustomers = new DataServiceCollection<Customer>(customerQuery);
    
    try
    {
        // Get the customersViewSource resource and set the binding to the collection.
        customersViewSource =
            ((CollectionViewSource)(this.FindResource("customersViewSource")));
        customersViewSource.Source = trackedCustomers;
        customersViewSource.View.MoveCurrentToFirst();
    }
    catch (DataServiceQueryException ex)
    {
        MessageBox.Show("The query could not be completed:\n" + ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        MessageBox.Show("The following error occurred:\n" + ex.ToString());
    }
    
  12. Dieser Code erstellt eine Instanz von DataServiceCollection<T> für den Customers-Typ basierend auf der Ausführung einer LINQ-Abfrage, die zusammen mit verknüpften Orders-Objekten aus dem Northwind-Datendienst eine IEnumerable<T> von Customers zurückgibt und an die customersViewSource bindet.

So verwenden Sie eine Projektdatenquelle in einem Windows Form

  1. Erweitern Sie im Fenster Datenquellen den Knoten Customers in der Projektdatenquelle NorthwindEntities.

  2. Klicken Sie auf das CustomerID-Element, wählen Sie ComboBox aus der Liste aus, und ziehen Sie das CustomerID-Element aus dem Knoten Customers auf den Designer.

    Dadurch werden die folgenden Steuerelemente im Formular erstellt:

    • Eine Instanz von BindingSource mit dem Namen customersBindingSource.

    • Eine Instanz von BindingNavigator mit dem Namen customersBindingNavigator. Sie können dieses Steuerelement löschen, da es nicht benötigt wird.

    • Ein datengebundenes ComboBox-Element mit dem Namen CustomerID.

    • Eine Label.

  3. Ziehen Sie die Orders-Navigationseigenschaft auf das Formular.

  4. Hierdurch wird das ordersBindingSource-Steuerelement mit der DataSource-Eigenschaft customersBindingSource und der DataMember-Eigenschaft Customers erstellt. Außerdem wird das datengebundene ordersDataGridView-Steuerelement mit einem entsprechend bezeichneten Label-Steuerelement für das Formular erstellt.

  5. (Optional) Ziehen Sie zusätzliche Elemente aus dem Knoten Customers auf den Designer.

  6. Öffnen Sie die Codepage für das Formular, und fügen Sie die folgenden using-Anweisungen (Imports in Visual Basic) hinzu:

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. Fügen Sie in der partiellen Klasse, die das Formular definiert, den folgenden Code hinzu, mit dem eine ObjectContext-Instanz erstellt wird und die customerID-Konstante definiert wird.

    Private context As NorthwindEntities
    Private trackedCustomers As DataServiceCollection(Of Customer)
    Private Const customerCountry As String = "Germany"
    Private Const svcUri As String = "http:'localhost:12345/Northwind.svc/"
    
    private NorthwindEntities context;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "https://localhost:12345/Northwind.svc/";
    
  8. Doppelklicken Sie im Formular-Designer auf das Formular.

    Dadurch wird die Codeseite für das Formular geöffnet und die Methode erstellt, die das Load-Ereignis für das Formular behandelt.

  9. Kopieren Sie den folgenden Code und fügen Sie ihn in den Load-Ereignishandler ein.

    ' Initialize the context for the data service.
    context = New NorthwindEntities(New Uri(svcUri))
    Try
        ' Create a LINQ query that returns customers with related orders.
        Dim customerQuery = From cust In context.Customers.Expand("Orders") _
                                Where cust.Country = customerCountry _
                                Select cust
    
        ' Create a new collection for binding based on the LINQ query.
        trackedCustomers = New DataServiceCollection(Of Customer)(customerQuery)
    
        'Bind the Customers combobox to the collection.
        customersComboBox.DisplayMember = "CustomerID"
        customersComboBox.DataSource = trackedCustomers
    Catch ex As DataServiceQueryException
        MessageBox.Show("The query could not be completed:\n" + ex.ToString())
    Catch ex As InvalidOperationException
        MessageBox.Show("The following error occurred:\n" + ex.ToString())
    
    // Initialize the context for the data service.
    context = new NorthwindEntities(new Uri(svcUri));
    try
    {
        // Create a LINQ query that returns customers with related orders.
        var customerQuery = from cust in context.Customers.Expand("Orders")
                            where cust.Country == customerCountry
                            select cust;
    
        // Create a new collection for binding based on the LINQ query.
        trackedCustomers = new DataServiceCollection<Customer>(customerQuery);
    
        //Bind the Customers combobox to the collection.
        customersComboBox.DisplayMember = "CustomerID";
        customersComboBox.DataSource = trackedCustomers;
    }
    catch (DataServiceQueryException ex)
    {
        MessageBox.Show("The query could not be completed:\n" + ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        MessageBox.Show("The following error occurred:\n" + ex.ToString());
    }
    
  10. Dieser Code erstellt eine Instanz von DataServiceCollection<T> für den Customers-Typ basierend auf der Ausführung einer DataServiceQuery<TElement>, die aus dem Northwind-Datendienst eine IEnumerable<T> von Customers zurückgibt und an die customersBindingSource bindet.

Siehe auch

Aufgaben

Gewusst wie: Binden von Daten an Windows Presentation Foundation-Elemente (WCF Data Services)

Andere Ressourcen

Datenclient (WCF Data Services)