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
Cliquez avec le bouton droit sur la solution dans l'Explorateur de solutions, cliquez sur Ajouter, puis sur Nouveau projet.
Dans Types de projet, cliquez sur Windows, puis sélectionnez Application WPF dans le volet Modèles.
Entrez NorthwindClient comme nom de projet, puis cliquez sur OK.
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
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.
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
Dans l'Explorateur de solutions sous NorthwindClient, cliquez avec le bouton droit sur le projet, puis cliquez sur Ajouter une référence.
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;
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()); } }
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
Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le projet NorthwindClient et sélectionnez Définir comme projet de démarrage.
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.
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).