Partager via


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 du projet est créée avec les classes de données client générées. Une source de données est créée pour chaque jeu d'entités que le service de données expose. 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<T> 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

  1. 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).

  2. Dans la fenêtre Sources de données, développez le nœud Customers dans la source de données projet NorthwindEntities.

  3. 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 :

  4. 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 est customerViewSource.

    • Un contrôle DataGrid lié aux données nommé ordersDataGrid.

  5. (Facultatif) Faites glisser des éléments supplémentaires du nœud Customers vers le concepteur.

  6. 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;
    
  7. 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/";
    
  8. Dans le concepteur, sélectionnez la fenêtre.

    Notes

    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.

  9. Dans la fenêtre Propriétés, cliquez sur le bouton Événements.

  10. 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.

  11. 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());
    }
    
  12. Ce code crée une instance de DataServiceCollection<T> pour le type Customers basé sur l'exécution d'une requête LINQ qui retourne un IEnumerable<T> de Customers avec des objets Orders connexes du service de données Northwind et le lie à customersViewSource.

Pour utiliser une source de données projet dans un formulaire Windows

  1. Dans la fenêtre Sources de données, développez le nœud Customers dans la source de données projet NorthwindEntities.

  2. 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.

    • Label.

  3. Faites glisser la propriété de navigation Orders vers le formulaire.

  4. Cette opération crée le contrôle ordersBindingSource dont la propriété DataSource a la valeur customersBindingSource et la propriété DataMember la valeur Customers. Elle crée également dans le formulaire le contrôle lié aux données ordersDataGridView et son contrôle label avec le titre approprié.

  5. (Facultatif) Faites glisser des éléments supplémentaires du nœud Customers vers le concepteur.

  6. 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;
    
  7. 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/";
    
  8. 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.

  9. 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());
    }
    
  10. Ce code crée une instance de DataServiceCollection<T> pour le type Customers basé sur l'exécution d'un DataServiceQuery<TElement> qui retourne un IEnumerable<T> de Customers 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)

Autres ressources

Client de données (WCF Data Services)