Procedura: associare dati utilizzando un'origine dati del progetto (WCF Data Services)How to: Bind Data Using a Project Data Source (WCF Data Services)

È possibile creare origini dati basate sugli oggetti dati generati in un'applicazione client di WCF Data ServicesWCF Data Services.You can create data sources that are based on the generated data objects in an WCF Data ServicesWCF Data Services client application. Quando si aggiunge un riferimento a un servizio dati tramite il Aggiungi riferimento al servizio finestra di dialogo, un'origine dati del progetto viene creata con le classi di dati client generate.When you add a reference to a data service by using the Add Service Reference dialog, a project data source is created along with the generated client data classes. Per ogni set di entità esposto dal servizio dati viene creata un'origine dati.One data source is created for each entity set that the data service exposes. È possibile creare form che visualizzano i dati dal servizio mediante il trascinamento di questi elementi di origine dati dal origini dati finestra nella finestra di progettazione.You can create forms that display data from the service by dragging these data source items from the Data Sources window onto the designer. Questi elementi diventeranno controlli associati all'origine dati.These items become controls that are bound to the data source. Durante l'esecuzione, l'origine dati è associata a un'istanza di DataServiceCollection<T> (classe), che viene riempita con gli oggetti restituiti da una query al servizio dati.During execution, this data source is bound to an instance of the DataServiceCollection<T> class, which is filled with objects that are returned by a query to the data service. Per ulteriori informazioni, vedere Binding di dati a controlli.For more information, see Binding Data to Controls.

Negli esempi riportati in questo argomento vengono usati il servizio dati Northwind di esempio e le classi del servizio dati client generate automaticamente.The examples in this topic use the Northwind sample data service and autogenerated client data service classes. Questo servizio e le classi di dati client vengono create quando si completa la Guida rapida di WCF Data Services.This service and the client data classes are created when you complete the WCF Data Services quickstart.

Per usare un'origine dati del progetto in una finestra WPFTo use a project data source in a WPF window

  1. In un progetto WPF aggiungere un riferimento al servizio dati Northwind.In a WPF project, add a reference to the Northwind data service. Per ulteriori informazioni, vedere procedura: aggiungere un riferimento al servizio dati.For more information, see How to: Add a Data Service Reference.

  2. Nel origini dati finestra, espandere il Customers nodo il NorthwindEntities origine dati del progetto.In the Data Sources window, expand the Customers node in the NorthwindEntities project data source.

  3. Fare clic su di CustomerID elemento, seleziona ComboBox nell'elenco e trascinare il CustomerID articolo dal clienti nodo per il finestra di progettazione.Click the CustomerID item, select ComboBox from the list, and drag the CustomerID item from the Customers node to the designer.

    Nel file XAML per la finestra verranno creati gli elementi oggetto seguenti:This creates the following object elements in the XAML file for the window:

  4. Trascinare il ordini proprietà di navigazione nella finestra di progettazione.Drag the Orders navigation property to the designer.

    Nel file XAML per la finestra verranno creati gli elementi oggetto aggiuntivi seguenti:This creates the following additional object elements in the XAML file for the window:

    • Un secondo elemento CollectionViewSource denominato customersOrdersViewSource, la cui origine è customerViewSource.A second CollectionViewSource element named customersOrdersViewSource, the source of which is the customerViewSource.

    • Un controllo DataGrid con associazione a dati denominato ordersDataGrid.A data-bound DataGrid control named ordersDataGrid.

  5. (Facoltativo) Trascinare elementi aggiuntivi dal clienti nodo nella finestra di progettazione.(Optional) Drag additional items from the Customers node to the designer.

  6. Aprire la tabella codici per il form e aggiungere le istruzioni using seguenti (Imports in Visual Basic):Open the code page for the form and add the following using statements (Imports in Visual Basic):

    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
  7. Nella classe parziale che definisce il form aggiungere il codice seguente per creare un'istanza di ObjectContext e definire la costante customerID.In the partial class that defines the form, add the following code that creates an ObjectContext instance and defines the customerID constant.

    private NorthwindEntities context;
    private CollectionViewSource customersViewSource;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "http://localhost:12345/Northwind.svc/";
    
    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 = "http://localhost:12345/Northwind.svc/"
    
  8. Nella finestra di progettazione selezionare la finestra.In the designer, select the window.

    Nota

    Assicurarsi di selezionare la finestra stessa anziché il contenuto incluso nella finestra.Make sure that you select the window itself, rather than selecting content that is within the window. Se la finestra è selezionata, il nome casella di testo nella parte superiore del proprietà finestra deve contenere il nome della finestra.If the window is selected, the Name text box near the top of the Properties window should contain the name of the window.

  9. Nel proprietà finestra, seleziona il eventi pulsante.In the Properties window, select the Events button.

  10. Trovare il Loaded evento e fare doppio clic su elenco a discesa accanto a questo evento.Find the Loaded event, and then double-click the drop-down list next to this event.

    In Visual Studio verrà aperto il file code-behind per la finestra e verrà generato un gestore di eventi Loaded.Visual Studio opens the code-behind file for the window and generates a Loaded event handler.

  11. Nel gestore di eventi Loaded appena creato copiare e incollare il codice che segue.In the newly created Loaded event handler, copy and paste the following code.

    // 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());
    }
    
    ' 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
    
  12. Tramite questo codice viene creata un'istanza di DataServiceCollection<T> per il tipo di Customers in base all'esecuzione di una query LINQ che restituisce un oggetto IEnumerable<T> di Customers insieme agli oggetti Orders correlati dal servizio dati Northwind e tale istanza viene associata a customersViewSource.This code creates an instance of DataServiceCollection<T> for the Customers type based on the execution of a LINQ query that returns an IEnumerable<T> of Customers along with related Orders objects from the Northwind data service and binds it to the customersViewSource.

Per usare un'origine dati del progetto in un Windows FormTo use a project data source in a Windows form

  1. Nel origini dati finestra, espandere il clienti nodo il NorthwindEntities origine dati del progetto.In the Data Sources window, expand the Customers node in the NorthwindEntities project data source.

  2. Fare clic su di CustomerID elemento, seleziona ComboBox nell'elenco e trascinare il CustomerID articolo dal clienti nodo per il finestra di progettazione.Click the CustomerID item, select ComboBox from the list, and drag the CustomerID item from the Customers node to the designer.

    Nel form verranno creati i controlli seguenti:This creates the following controls on the form:

    • Un'istanza di BindingSource denominata customersBindingSource.An instance of BindingSource named customersBindingSource.

    • Un'istanza di BindingNavigator denominata customersBindingNavigator.An instance of BindingNavigator named customersBindingNavigator. È possibile eliminare questo controllo in quanto non necessario.You can delete this control as it will not be needed.

    • Un oggetto ComboBox con associazione a dati denominato CustomerID.A data-bound ComboBox named CustomerID.

    • Oggetto Label.A Label.

  3. Trascinare il ordini proprietà di navigazione al form.Drag the Orders navigation property to the form.

  4. Verrà creato il controllo ordersBindingSource con la proprietà DataSource impostata su customersBindingSource e la proprietà DataMember impostata su Customers.This creates the ordersBindingSource control with the DataSource property of the control set to the customersBindingSource and the DataMember property set to Customers. Nel form verrà inoltre creato il controllo con associazione a dati ordersDataGridView, accompagnato da un controllo etichetta con il titolo appropriato.It also creates the ordersDataGridView data-bound control on the form, accompanied by an appropriately titled label control.

  5. (Facoltativo) Trascinare elementi aggiuntivi dal clienti nodo nella finestra di progettazione.(Optional) Drag additional items from the Customers node to the designer.

  6. Aprire la tabella codici per il form e aggiungere le istruzioni using seguenti (Imports in Visual Basic):Open the code page for the form and add the following using statements (Imports in Visual Basic):

    using System.Data.Services.Client;
    using NorthwindClient.Northwind;
    
    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
  7. Nella classe parziale che definisce il form aggiungere il codice seguente per creare un'istanza di ObjectContext e definire la costante customerID.In the partial class that defines the form, add the following code that creates an ObjectContext instance and defines the customerID constant.

    private NorthwindEntities context;
    private DataServiceCollection<Customer> trackedCustomers;
    private const string customerCountry = "Germany";
    private const string svcUri = "http://localhost:12345/Northwind.svc/";
    
    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/"
    
  8. Nella finestra di progettazione dei form fare doppio clic sul form.In the form designer, double-click the form.

    Verrà visualizzata la tabella codici per il form e verrà creato il metodo che gestisce l'evento Load per il form.This opens the code page for the form and creates the method that handles the Load event for the form.

  9. Nel gestore di eventi Load copiare e incollare il codice riportato di seguito.In the Load event handler, copy and paste the following code.

    // 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());
    }
    
    ' 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())
    
  10. Tramite questo codice viene creata un'istanza di DataServiceCollection<T> per il tipo di Customers in base all'esecuzione di un oggetto DataServiceQuery<TElement> che restituisce un oggetto IEnumerable<T> di Customers dal servizio dati Northwind e tale istanza viene associata a customersBindingSource.This code creates an instance of DataServiceCollection<T> for the Customers type based on the execution of a DataServiceQuery<TElement> that returns an IEnumerable<T> of Customers from the Northwind data service and binds it to the customersBindingSource.

Vedere ancheSee Also

Libreria client WCF Data ServicesWCF Data Services Client Library
Procedura: Associare dati a elementi Windows Presentation FoundationHow to: Bind Data to Windows Presentation Foundation Elements