Partager via


Liaison de flux OData aux contrôles d'une application cliente (démarrage rapide de WCF Data Services)

Dans cette tâche finale du démarrage rapide Services de données WCF, vous allez créer une application cliente plus avancée pour consommer le service Northwind créé lors de la tâche précédente. Vous allez ajouter une nouvelle application Windows Presentation Foundation (WPF) à la solution, ajouter une référence au service Northwind accessible en écriture et accéder au flux OData depuis l'application cliente à l'aide des classes de service de données client et des bibliothèques clientes générées. Vous allez ensuite utiliser cette application pour mettre à jour les données Northwind à l'aide d'OData.

Notes

Par défaut, Visual Studio affecte automatiquement un numéro de port à l'URI localhost sur votre ordinateur.Cette tâche utilise le numéro de port 12345 dans les exemples d'URI.Pour plus d'informations sur le sujet suivant la définition d'un numéro de port spécifique dans votre projet Visual Studio, consultez Création du service de données Northwind (démarrage rapide de WCF Data Services).

Pour créer l'application cliente à l'aide de Visual Studio

  1. Cliquez avec le bouton droit sur la solution dans l'Explorateur de solutions, cliquez sur Ajouter, puis sur Nouveau projet.

  2. Dans Types de projet, cliquez sur Windows, puis sélectionnez Application WPF dans le volet Modèles.

  3. Entrez NorthwindClient comme nom de projet, puis cliquez sur OK.

  4. Ouvrez le fichier MainWindow.xaml et remplacez le code XAML par le code suivant :

        <Window x:Class="MainWindow"
        xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
        Title="Northwind Orders" Height="335" Width="425" 
            Name="OrdersWindow" Loaded="Window1_Loaded">
        <Grid Name="orderItemsGrid">
            <ComboBox DisplayMemberPath="OrderID" ItemsSource="{Binding}"
                      IsSynchronizedWithCurrentItem="true" 
                      Height="23" Margin="92,12,198,0" Name="comboBoxOrder" VerticalAlignment="Top"/>
            <DataGrid ItemsSource="{Binding Path=Order_Details}"  
                      CanUserAddRows="False" CanUserDeleteRows="False"  
                      Name="orderItemsDataGrid" Margin="34,46,34,50"
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn  Header="Product" Binding="{Binding ProductID, Mode=OneWay}" />
                    <DataGridTextColumn  Header="Quantity" Binding="{Binding Quantity, Mode=TwoWay}" />
                    <DataGridTextColumn  Header="Price" Binding="{Binding UnitPrice, Mode=TwoWay}" />
                    <DataGridTextColumn  Header="Discount" Binding="{Binding Discount, Mode=TwoWay}" />                
                </DataGrid.Columns>     
            </DataGrid>
            <Label Height="28" Margin="34,12,0,0" Name="orderLabel" VerticalAlignment="Top" 
                   HorizontalAlignment="Left" Width="65">Order:</Label>
            <StackPanel Name="Buttons" Orientation="Horizontal" HorizontalAlignment="Right" 
                        Height="40" Margin="0,257,22,0">
                <Button Height="23" HorizontalAlignment="Right" Margin="0,0,12,12" 
                    Name="buttonSave" VerticalAlignment="Bottom" Width="75" 
                        Click="buttonSaveChanges_Click">Save Changes
                </Button>
                <Button Height="23" Margin="0,0,12,12" 
                    Name="buttonClose" VerticalAlignment="Bottom" Width="75" 
                        Click="buttonClose_Click">Close</Button>
            </StackPanel>
        </Grid>
    </Window>
    

Pour ajouter une référence de service de données au projet

  1. Cliquez avec le bouton droit sur le projet NorthwindClient, puis cliquez sur Ajouter une référence de service, puis sur Découvrir.

    Cette opération affiche le service de données Northwind que vous avez créé dans la première tâche.

  2. Dans la zone de texte Espace de noms, tapez Northwind, puis cliquez sur OK.

    Cette opération ajoute un nouveau fichier de code au projet qui contient les classes de données utilisées pour accéder et interagir avec les ressources du service des données sous la forme d'objets. Les classes de données sont créées dans l'espace de noms NorthwindClient.Northwind.

Pour accéder aux données du service des données dans l'application WPF

  1. Dans l'Explorateur de solutions sous NorthwindClient, cliquez avec le bouton droit sur le projet, puis cliquez sur Ajouter une référence.

  2. Dans la boîte de dialogue Ajouter une référence, cliquez sur l'onglet .NET, sélectionnez l'assembly System.Data.Services.Client.dll, puis cliquez sur OK. Dans l'Explorateur de solutions sous NorthwindClient, ouvrez la page de codes pour le fichier MainWindow.xaml et ajoutez l'instruction using suivante (Imports en Visual Basic).

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  3. Insérez le code suivant qui interroge le service de données et lie le résultat à une DataServiceCollection<T> dans la classe MainWindow:

    Notes

    Vous devez remplacer le nom d'hôte localhost:12345 par le serveur et le port qui hébergent votre instance du service de données Northwind.

    Private context As NorthwindEntities
    Private customerId As String = "ALFKI"
    
    ' Replace the host server and port number with the values 
    ' for the test server hosting your Northwind data service instance.
    Private svcUri As Uri = New Uri("https://localhost:12345/Northwind.svc")
    
    Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Try
            ' Instantiate the DataServiceContext.
            context = New NorthwindEntities(svcUri)
    
            ' Define a LINQ query that returns Orders and 
            ' Order_Details for a specific customer.
            Dim ordersQuery = From o In context.Orders.Expand("Order_Details") _
                                  Where o.Customer.CustomerID = customerId _
                                  Select o
    
            ' Create an DataServiceCollection(Of T) based on
            ' execution of the LINQ query for Orders.
            Dim customerOrders As DataServiceCollection(Of Order) = New  _
                DataServiceCollection(Of Order)(ordersQuery)
    
            ' Make the DataServiceCollection<T> the binding source for the Grid.
            Me.orderItemsGrid.DataContext = customerOrders
        Catch ex As Exception
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    
    private NorthwindEntities context;
    private string customerId = "ALFKI";
    
    // Replace the host server and port number with the values 
    // for the test server hosting your Northwind data service instance.
    private Uri svcUri = new Uri("https://localhost:12345/Northwind.svc");
    
    private void Window1_Loaded(object sender, RoutedEventArgs e)
    {
        try
        {
            // Instantiate the DataServiceContext.
            context = new NorthwindEntities(svcUri);
    
            // Define a LINQ query that returns Orders and 
            // Order_Details for a specific customer.
            var ordersQuery = from o in context.Orders.Expand("Order_Details")
                              where o.Customer.CustomerID == customerId
                              select o;
    
            // Create an DataServiceCollection<T> based on 
            // execution of the LINQ query for Orders.
            DataServiceCollection<Order> customerOrders = new
                DataServiceCollection<Order>(ordersQuery);
    
            // Make the DataServiceCollection<T> the binding source for the Grid.
            this.orderItemsGrid.DataContext = customerOrders;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    
  4. Insérez le code suivant qui enregistre les modifications dans la classe MainWindow :

    Private Sub buttonSaveChanges_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
        Try
            ' Save changes made to objects tracked by the context.
            context.SaveChanges()
        Catch ex As DataServiceRequestException
            MessageBox.Show(ex.ToString())
        End Try
    End Sub
    Private Sub buttonClose_Click(ByVal sender As Object, ByVal a As RoutedEventArgs)
        Me.Close()
    End Sub
    
    private void buttonSaveChanges_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            // Save changes made to objects tracked by the context.
            context.SaveChanges();
        }
        catch (DataServiceRequestException ex)
        {
            MessageBox.Show(ex.ToString());
    
        }
    }
    private void buttonClose_Click(object sender, RoutedEventArgs e)
    {
        this.Close();
    }
    

Pour générer et exécuter l'application NothwindClient

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet NorthwindClient et sélectionnez Définir comme projet de démarrage.

  2. Appuyez sur F5 pour démarrer l'application.

    Cette opération génère et démarre l'application cliente. Les données sont demandées auprès du service et liées aux contrôles.

  3. Modifiez une valeur dans la colonne Quantité de la grille de données, puis cliquez sur Enregistrer.

    Les modifications sont enregistrées sur le service de données.

    Notes

    Cette version de l'application NorthwindClient ne prend pas en charge l'ajout et la suppression d'entités.

Étapes suivantes

Vous avez créé correctement l'application cliente qui accède à l'exemple de flux OData Northwind. Vous avez également terminé le démarrage rapide Services de données WCF. Pour plus d'informations sur le sujet suivant l'accès à un flux OData à partir d'une application .NET Framework, consultez Client de données (WCF Data Services).

Voir aussi

Concepts

Ressources WCF Data Services

Autres ressources

Mise en route de WCF Data Services