Freigeben über


Binden von OData-Feeds an Steuerelemente in einer Clientanwendung (WCF Data Services-Schnellstart)

In dieser letzten Aufgabe des WCF Data Services-Schnellstarts erstellen Sie eine erweiterte Clientanwendung zur Verarbeitung des in der vorhergehenden Aufgabe erstellten Northwind-Diensts. Sie fügen der Projektmappe eine neue Windows Presentation Foundation (WPF)-Anwendung hinzu, fügen einen Verweis auf den schreibbaren Northwind-Dienst hinzu und greifen aus der Clientanwendung mit den generierten Clientdatendienstklassen und Clientbibliotheken auf den OData-Feed zu. Diese Anwendung verwenden Sie anschließend, um Northwind-Daten mit OData zu aktualisieren.

Hinweis

Standardmäßig weist Visual Studio dem localhost-URI auf dem Computer automatisch eine Portnummer zu.Für diese Aufgabe wird in den URI-Beispielen die Portnummer 12345 verwendet.Themenbereich zum Festlegen einer bestimmten Portnummer im Visual Studio-Projekt finden Sie unter Erstellen des Northwind-Datendiensts (WCF Data Services-Schnellstart).

So erstellen Sie die Clientanwendung mit Visual Studio

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Projektmappe, klicken Sie auf Hinzufügen und dann auf Neues Projekt.

  2. Klicken Sie in Projekttypen auf Windows, und wählen Sie dann im Bereich Vorlagen die Option WPF-Anwendung aus.

  3. Geben Sie NorthwindClient als Projektnamen ein, und klicken Sie dann auf OK.

  4. Öffnen Sie die Datei MainWindow.xaml, und ersetzen Sie den XAML-Code durch folgenden Code:

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

So fügen Sie dem Projekt einen Datendienstverweis hinzu

  1. Klicken Sie mit der rechten Maustaste auf das NorthwindClient-Projekt, klicken Sie auf Dienstverweis hinzufügen und dann auf Ermitteln.

    Dadurch wird der Northwind-Datendienst angezeigt, den Sie in der ersten Aufgabe erstellt haben.

  2. Geben Sie im Textfeld Namespace Northwind ein, und klicken Sie auf OK.

    Dadurch wird dem Projekt, das die zum Zugriff auf und zur Interaktion mit Datendienstressourcen als Objekte verwendeten Datenklassen enthält, eine neue Codedatei hinzugefügt. Die Datenklassen werden im Namespace NorthwindClient.Northwind erstellt.

So greifen Sie auf Datendienstdaten in der WPF-Anwendung zu

  1. Klicken Sie im Projektmappen-Explorer unter NorthwindClient mit der rechten Maustaste auf das Projekt, und klicken Sie dann auf Verweis hinzufügen.

  2. Wählen Sie im Dialogfeld "Verweis hinzufügen" auf der Registerkarte .NET die System.Data.Services.Client.dll-Assembly aus, und klicken Sie anschließend auf OK. Öffnen Sie im Projektmappen-Explorer unter NorthwindClient die Codepage für die Datei MainWindow.xaml, und fügen Sie die folgende using-Anweisung (Imports in Visual Basic) hinzu.

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  3. Fügen Sie den folgenden Code ein, der diesen Datendienst abfragt und das Ergebnis an eine DataServiceCollection<T> in der MainWindow-Klasse bindet:

    Hinweis

    Sie müssen den Hostnamen localhost:12345 durch den Server und den Anschluss ersetzen, der die Instanz des Northwind-Datendiensts hostet.

    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. Fügen Sie den folgenden Code zum Speichern von Änderungen in die MainWindow-Klasse hinzu:

    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();
    }
    

So erstellen Sie die NorthwindClient-Anwendung und führen sie aus

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das NorthwindClient-Projekt, und wählen Sie Als Startprojekt festlegen aus.

  2. Drücken Sie F5, um die Anwendung zu starten.

    Die Projektmappe wird erstellt und die Clientanwendung wird gestartet. Daten werden vom Dienst angefordert und an die Steuerelemente gebunden.

  3. Bearbeiten Sie in der Spalte Quantity des Datenrasters einen Wert, und klicken Sie dann auf Speichern.

    Die Änderungen werden im Datendienst gespeichert.

    Hinweis

    In dieser Version der Anwendung NorthwindClient wird das Hinzufügen und Löschen von Entitäten nicht unterstützt.

Nächste Schritte

Sie haben die Clientanwendung, die auf den Northwind OData-Beispielfeed zugreift, erfolgreich erstellt. Der WCF Data Services-Schnellstart ist damit abgeschlossen. Themenbereich zum Zugreifen auf einen OData-Feed in einer .NET Framework-Anwendung finden Sie unter Datenclient (WCF Data Services).

Siehe auch

Konzepte

WCF Data Services-Ressourcen

Andere Ressourcen

Erste Schritte mit WCF Data Services