Compartir a través de


Enlazar fuentes de OData a controles en una aplicación cliente (Tutorial rápido de WCF Data Services)

En esta última tarea del tutorial rápido de Servicios de datos de Microsoft WCF, creará una aplicación cliente más avanzada para consumir el servicio Northwind creado en la tarea anterior. Agregará una nueva aplicación Windows Presentation Foundation (WPF) a la solución, agregará una referencia al servicio Northwind grabable y obtendrá acceso a la fuente de OData desde la aplicación cliente usando las clases del servicio de datos del cliente y las bibliotecas cliente generadas. Después usará esta aplicación para actualizar datos de Northwind mediante OData.

Nota

De forma predeterminada, Visual Studio asigna automáticamente un número de puerto al URI localhost en el equipo.En esta tarea se usa el número de puerto 12345 en los ejemplos de URI.Para obtener más información sobre cómo establecer un número de puerto concreto en su proyecto de Visual Studio, vea Crear el servicio de datos Northwind (Tutorial rápido de WCF Data Services).

Para crear la aplicación cliente mediante Visual Studio

  1. En el Explorador de soluciones, haga clic con el botón secundario en la solución, después haga clic en Agregar y, a continuación, en Nuevo proyecto.

  2. En Tipos de proyecto, haga clic en Windows y, a continuación, seleccione Aplicación WPF en el panel Templates.

  3. Escriba NorthwindClient como nombre del proyecto y haga clic en Aceptar.

  4. Abra el archivo MainWindow.xaml y reemplace el código XAML con el código siguiente:

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

Para agregar al proyecto una referencia al servicio de datos

  1. Haga clic con el botón secundario en el proyecto NorthwindClient, haga clic en Agregar referencia de servicio y, a continuación, haga clic en Detectar.

    De este modo se muestra el servicio de datos de Northwind que creó en la primera tarea.

  2. En el cuadro de texto Espacio de nombres, escriba Northwind y, a continuación, haga clic en Aceptar.

    De este modo se agrega un nuevo archivo de código al proyecto, que contiene las clases de datos que se usan para obtener acceso e interactuar con los recursos del servicio de datos como objetos. Las clases de datos se crean en el espacio de nombres NorthwindClient.Northwind.

Para tener acceso a los datos del servicio de datos en la aplicación WPF

  1. En el Explorador de soluciones, en NorthwindClient, haga clic con el botón secundario en el proyecto y haga clic en Agregar referencia.

  2. En el cuadro de diálogo Agregar referencia, haga clic en la pestaña .NET, seleccione el ensamblado System.Data.Services.Client.dll y, a continuación, haga clic en Aceptar. En el Explorador de soluciones, en NorthwindClient, abra la página de codigos para el archivo MainWindow.xaml y agregue la instrucción using siguiente (Imports en Visual Basic).

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  3. Inserte el código siguiente que consulta al servicio de datos y enlaza el resultado a una instancia de DataServiceCollection<T> en la clase MainWindow:

    Nota

    Debe reemplazar el nombre de host localhost:12345 por el servidor y el puerto en que se hospeda la instancia del servicio de datos de 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. Inserte el código siguiente que sirve para guardar los cambios en la clase 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();
    }
    

Para compilar y ejecutar la aplicación NorthwindClient

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto NorthwindClient y seleccione Establecer como proyecto de inicio.

  2. Presione F5 para iniciar la aplicación.

    Se compila la solución y se inicia la aplicación cliente. Se solicitan datos al servicio y se enlazan a los controles.

  3. Edite un valor de la columna Cantidad de la cuadrícula de datos y, a continuación, haga clic en Guardar.

    Los cambios se guardan en el servicio de datos.

    Nota

    Esta versión de la aplicación NorthwindClient no admite agregar ni eliminar entidades.

Pasos siguientes

Ha creado correctamente la aplicación cliente que tiene acceso a la fuente de OData Northwind de ejemplo. También ha completado el tutorial rápido de Servicios de datos de Microsoft WCF. Para obtener más información sobre el acceso a una fuente de OData desde una aplicación de .NET Framework, vea Cliente de datos (WCF Data Services).

Vea también

Conceptos

Recursos de WCF Data Services

Otros recursos

Introducción a WCF Data Services