Procédure : lier des données à l'aide d'une source de données projet (WCF Data Services)
Vous pouvez créer des sources de données basées sur les objets de données générés dans une application cliente Services de données WCF . Lorsque vous ajoutez une référence à un service de données à l'aide de la boîte de dialogue Ajouter une référence de service, une source de données projet est créée avec les classes de données clientes générées. Une source de données est créée pour chaque jeu d'entités exposé par le service de données. Vous pouvez créer des formulaires qui affichent des données issues du service en faisant simplement glisser des éléments de source de données de la fenêtre Sources de données vers le concepteur. Ces éléments deviennent des contrôles liés à la source de données. Pendant l'exécution, cette source de données est liée à une instance de la classe DataServiceCollection qui est remplie avec des objets retournés par une requête vers le service de données. Pour plus d'informations, consultez Liaison des données aux contrôles (WCF Data Services).
Les exemples dans cette rubrique utilisent l'exemple de service de données Northwind et des classes de service de données client générées automatiquement. Ce service et les classes de données clientes sont créés lorsque vous complétez le démarrage rapide WCF Data Services.
Pour utiliser une source de données projet dans une fenêtre WPF
Dans un projet WPF, ajoutez une référence au service de données Northwind. Pour plus d'informations, consultez Procédure : ajouter une référence de service de données (WCF Data Services).
Dans la fenêtre Sources de données, développez le nœud
Customers
dans la source de données projet NorthwindEntities.Cliquez sur l'élément CustomerID, sélectionnez ComboBox dans la liste et faites glisser l'élément CustomerID du nœud Customers vers le concepteur.
Cela crée les éléments objet suivants dans le fichier XAML pour la fenêtre :
Un élément CollectionViewSource nommé
customersViewSource
. La propriété DataContext de l'élément objet Grid de niveau supérieur est définie sur cette nouvelle CollectionViewSource.Un ComboBox lié aux données nommé
CustomerID
.
Faites glisser la propriété de navigation Orders vers le concepteur.
Cela crée les éléments objet supplémentaires suivants dans le fichier XAML pour la fenêtre :
Un deuxième élément CollectionViewSource nommé
customersOrdersViewSource
, dont la source estcustomerViewSource
.Un contrôle DataGrid lié aux données nommé
ordersDataGrid
.
(Facultatif) Faites glisser des éléments supplémentaires du nœud Customers vers le concepteur.
Ouvrez la page de codes du formulaire et ajoutez les instructions using (Imports en Visual Basic) suivantes :
using System.Data.Services.Client; using NorthwindClient.Northwind;
Dans la classe partielle qui définit le formulaire, ajoutez le code suivant, qui crée une instance d'ObjectContext et définit la constante
customerID
.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/";
Dans le concepteur, sélectionnez la fenêtre.
Remarque : Assurez-vous que vous sélectionnez la fenêtre elle-même, plutôt que de sélectionner le contenu qui est dans la fenêtre.Si la fenêtre est sélectionnée, la zone de texte Nom près du haut de la fenêtre Propriétés doit contenir le nom de la fenêtre. Dans la fenêtre Propriétés, cliquez sur le bouton Événements.
Recherchez l'événement Loaded, puis double-cliquez sur la liste déroulante en regard de cet événement.
Visual Studio ouvre le fichier code-behind pour la fenêtre et génère un gestionnaire d'événements Loaded.
Dans la méthode de gestionnaire d'événements Loaded récemment créé, copiez et collez le code suivant.
' 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()); }
Ce code crée une instance de DataServiceCollection pour le type
Customers
basé sur l'exécution d'une requête LINQ qui retourne un IEnumerable deCustomers
avec des objetsOrders
connexes du service de données Northwind et le lie àcustomersViewSource
.
Pour utiliser une source de données projet dans un formulaire Windows
Dans la fenêtre Sources de données, développez le nœud Customers dans la source de données projet NorthwindEntities.
Cliquez sur l'élément CustomerID, sélectionnez ComboBox dans la liste et faites glisser l'élément CustomerID du nœud Customers vers le concepteur.
Cette opération crée les contrôles suivants dans le formulaire :
Instance de BindingSource nommée
customersBindingSource
.Instance de BindingNavigator nommée
customersBindingNavigator
. Vous pouvez supprimer ce contrôle qui ne sera pas nécessaire.Un ComboBox lié aux données nommé
CustomerID
.
Faites glisser la propriété de navigation Orders vers le formulaire.
Cette opération crée le contrôle
ordersBindingSource
dont la propriété DataSource a la valeurcustomersBindingSource
et la propriété DataMember la valeurCustomers
. Elle crée également dans le formulaire le contrôle lié aux donnéesordersDataGridView
et son contrôle label avec le titre approprié.(Facultatif) Faites glisser des éléments supplémentaires du nœud Customers vers le concepteur.
Ouvrez la page de codes du formulaire et ajoutez les instructions using (Imports en Visual Basic) suivantes :
Imports System.Data.Services.Client Imports NorthwindClient.Northwind
using System.Data.Services.Client; using NorthwindClient.Northwind;
Dans la classe partielle qui définit le formulaire, ajoutez le code suivant, qui crée une instance d'ObjectContext et définit la constante
customerID
.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/";
Dans le concepteur de formulaires, double-cliquez sur le formulaire.
La page de codes du formulaire s'ouvre et la méthode qui gère l'événement
Load
du formulaire est créée.Dans la méthode de gestionnaire d'événements
Load
, copiez et collez le code suivant.' 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()); }
Ce code crée une instance de DataServiceCollection pour le type
Customers
basé sur l'exécution d'un DataServiceQuery qui retourne un IEnumerable deCustomers
du service de données Northwind et le lie àcustomersBindingSource
.
Voir aussi
Tâches
Procédure : lier des données aux éléments Windows Presentation Foundation (WCF Data Services)