Share via


Cómo: Enlazar datos mediante un origen de datos del proyecto (WCF Data Services)

Puede crear orígenes de datos basados en los objetos de datos generados en una aplicación cliente de WCF Data Services . Cuando se agrega una referencia a un servicio de datos usando el cuadro de diálogo Agregar referencia de servicio, se crea un origen de datos del proyecto junto con las clases generadas de datos del cliente. Para cada conjunto de entidades expuesto por el servicio de datos se crea un origen de datos. Puede crear formularios que muestran datos procedentes del servicio arrastrando estos elementos del origen de datos desde la ventana Orígenes de datos al diseñador. Estos elementos se convierten en controles enlazados al origen de datos. Durante la ejecución, este origen de datos se enlaza a una instancia de la clase DataServiceCollection, que se rellena con los objetos devueltos por una consulta al servicio de datos. Para obtener más información, vea Enlazar datos a controles (WCF Data Services).

En los ejemplos de este tema se usa el servicio de datos de ejemplo Northwind y las clases del servicio de datos del cliente generadas automáticamente. Se crean este servicio y las clases de datos del cliente al completar el tutorial rápido de WCF Data Services.

Para usar un origen de datos del proyecto en una ventana de WPF

  1. En un proyecto WPF, agregue una referencia al servicio de datos de Northwind. Para obtener más información, vea Cómo: Agregar una referencia a un servicio de datos (WCF Data Services).

  2. En la ventana Orígenes de datos, expanda el nodo Customers del origen de datos del proyecto NorthwindEntities.

  3. Haga clic en el elemento CustomerID, seleccione ComboBox en la lista y arrastre el elemento CustomerID desde el nodo Customers al diseñador.

    Con ello se crean los siguientes elementos de objeto en el archivo XAML de la ventana:

    • Un elemento CollectionViewSource denominado customersViewSource. La propiedad DataContext del elemento de objeto Grid de nivel superior se establece en este nuevo elemento CollectionViewSource.

    • Un control ComboBox enlazado a datos denominado CustomerID.

    • Un control Label.

  4. Arrastre la propiedad de navegación Orders al diseñador.

    Con ello se crean los siguientes elementos de objeto adicionales en el archivo XAML de la ventana:

    • Un segundo elemento CollectionViewSource denominado customersOrdersViewSource, cuyo origen es customerViewSource.

    • Un control DataGrid enlazado a datos denominado ordersDataGrid.

  5. (Opcional) Arrastre elementos adicionales desde el nodo Customers al diseñador.

  6. Abra la página de código del formulario y agregue las instrucciones using siguientes (Imports en Visual Basic):

    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. En la clase parcial que define el formulario, agregue el código siguiente que crea una instancia de ObjectContext y define 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. En el diseñador, seleccione la ventana.

    Ee373840.note(es-es,VS.100).gifNota:
    Asegúrese de que selecciona la ventana, y no el contenido situado dentro de ella.Cuando está seleccionada la ventana, el cuadro de texto Nombre situado cerca de la parte superior de la ventana Propiedades debería contener el nombre de la ventana.

  9. En la ventana Propiedades, seleccione el botón Eventos.

  10. Busque el evento Loaded y, a continuación, haga doble clic en la lista desplegable situada junto a este evento.

    Visual Studio abre el archivo de código subyacente para la ventana y genera un controlador de eventos Loaded.

  11. En el controlador de eventos Loaded que se acaba de crear, copie y pegue el código siguiente.

    ' 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. Este código crea una instancia de DataServiceCollection para el tipo Customers basándose en la ejecución de una consulta LINQ que devuelve una interfaz IEnumerable de Customers junto con los objetos Orders relacionados desde el servicio de datos de Northwind y la enlaza con el elemento customersViewSource.

Para usar un origen de datos del proyecto en un formulario de Windows

  1. En la ventana Orígenes de datos, expanda el nodo Customers del origen de datos del proyecto NorthwindEntities.

  2. Haga clic en el elemento CustomerID, seleccione ComboBox en la lista y arrastre el elemento CustomerID desde el nodo Customers al diseñador.

    De esta forma se crean los controles siguientes en el formulario:

    • Una instancia de BindingSource denominada customersBindingSource.

    • Una instancia de BindingNavigator denominada customersBindingNavigator. Puede eliminar este control, dado que no será necesario.

    • Un control ComboBox enlazado a datos denominado CustomerID.

    • Un control Label.

  3. Arrastre la propiedad de navegación Orders al formulario.

  4. De esta forma se crea el control ordersBindingSource con la propiedad DataSource del control establecida en customersBindingSource y la propiedad DataMember establecida en Customers. También se crea el control enlazado a datos ordersDataGridView en el formulario, acompañado de un control de etiqueta con el título apropiado.

  5. (Opcional) Arrastre elementos adicionales desde el nodo Customers al diseñador.

  6. Abra la página de código del formulario y agregue las instrucciones using siguientes (Imports en Visual Basic):

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. En la clase parcial que define el formulario, agregue el código siguiente que crea una instancia de ObjectContext y define 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. En el diseñador de formularios, haga doble clic en el formulario.

    De esta forma se abre la página de código del formulario y se crea el método que administra el evento Load para el formulario.

  9. En el controlador de eventos Load, copie y pegue el código siguiente.

    ' 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. Este código crea una instancia de DataServiceCollection para el tipo Customers basándose en la ejecución de una instancia de DataServiceQuery que devuelve una interfaz IEnumerable de Customers desde el servicio de datos de Northwind y la enlaza con el elemento customersBindingSource.

Vea también

Tareas

Cómo: Enlazar datos a los elementos de Windows Presentation Foundation (WCF Data Services)

Otros recursos

Biblioteca de cliente de WCF Data Services