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
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).
Erweitern Sie im Fenster Datenquellen den Knoten Customers in der Projektdatenquelle NorthwindEntities.
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:
Ein CollectionViewSource-Element mit dem Namen customersViewSource. Die DataContext-Eigenschaft des Grid-Objektelements der obersten Ebene wird auf diese neue CollectionViewSource festgelegt.
Ein datengebundenes ComboBox-Element mit dem Namen CustomerID.
Eine Label.
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.
(Optional) Ziehen Sie zusätzliche Elemente aus dem Knoten Customers auf den Designer.
Ö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;
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/";
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.
Klicken Sie im Fenster Eigenschaften auf die Schaltfläche Ereignisse.
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.
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()); }
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
Erweitern Sie im Fenster Datenquellen den Knoten Customers in der Projektdatenquelle NorthwindEntities.
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.
Ziehen Sie die Orders-Navigationseigenschaft auf das Formular.
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.
(Optional) Ziehen Sie zusätzliche Elemente aus dem Knoten Customers auf den Designer.
Ö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;
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/";
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.
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()); }
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)