Condividi tramite


Procedura: associare dati utilizzando un'origine dati del progetto (WCF Data Services)

È possibile creare origini dati basate sugli oggetti dati generati in un'applicazione client di WCF Data Services. Quando si aggiunge un riferimento a un servizio dati utilizzando la finestra di dialogo Aggiungi riferimento al servizio, con le classi dati client generate viene creata un'origine dati del progetto. Per ogni set di entità esposto dal servizio dati viene creata un'origine dati. È possibile creare form per la visualizzazione dei dati del servizio trascinando gli elementi relativi a queste origini dati dalla finestra Origini dati nella finestra di progettazione. Questi elementi diventeranno controlli associati all'origine dati. Durante l'esecuzione, questa origine dati viene associata a un'istanza della classe DataServiceCollection<T>, in cui vengono inseriti gli oggetti restituiti da una query al servizio dati. Per ulteriori informazioni, vedere Associazione di dati a controlli (WCF Data Services).

Negli esempi riportati in questo argomento vengono utilizzati il servizio dati Northwind di esempio e le classi del servizio dati client generate automaticamente. Questo servizio e le classi di dati client vengono creati al completamento della Guida rapida di WCF Data Services.

Per utilizzare un'origine dati del progetto in una finestra WPF

  1. In un progetto WPF aggiungere un riferimento al servizio dati Northwind. Per ulteriori informazioni, vedere Procedura: aggiungere un riferimento al servizio dati (WCF Data Services).

  2. Nella finestra Origini dati espandere il nodo Customers nell'origine dati del progetto NorthwindEntities.

  3. Fare clic sull'elemento CustomerID, selezionare ComboBox nell'elenco e trascinare l'elemento CustomerID dal nodo Customers nella finestra di progettazione.

    Nel file XAML per la finestra verranno creati gli elementi oggetto seguenti:

  4. Trascinare la proprietà di navigazione Orders nella finestra di progettazione.

    Nel file XAML per la finestra verranno creati gli elementi oggetto aggiuntivi seguenti:

    • Un secondo elemento CollectionViewSource denominato customersOrdersViewSource, la cui origine è customerViewSource.

    • Un controllo DataGrid con associazione a dati denominato ordersDataGrid.

  5. (Facoltativo) Trascinare elementi aggiuntivi dal nodo Customers nella finestra di progettazione.

  6. Aprire la tabella codici per il form e aggiungere le istruzioni using seguenti (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.

    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. Nella finestra di progettazione selezionare la finestra.

    Nota

    Assicurarsi di selezionare la finestra stessa anziché il contenuto incluso nella finestra.Se si seleziona la finestra, nella casella di testo Nome accanto alla parte superiore della finestra Proprietà verrà visualizzato il nome della finestra.

  9. Nella finestra Proprietà selezionare il pulsante Eventi.

  10. Individuare l'evento Loaded, quindi fare doppio clic sull'elenco a discesa accanto a questo evento.

    In Visual Studio verrà aperto il file code-behind per la finestra e verrà generato un gestore di eventi Loaded.

  11. Nel gestore di eventi Loaded appena creato copiare e incollare il codice che segue.

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

Per utilizzare un'origine dati del progetto in un Windows Form

  1. Nella finestra Origini dati espandere il nodo Customers nell'origine dati del progetto NorthwindEntities.

  2. Fare clic sull'elemento CustomerID, selezionare ComboBox nell'elenco e trascinare l'elemento CustomerID dal nodo Customers nella finestra di progettazione.

    Nel form verranno creati i controlli seguenti:

    • Un'istanza di BindingSource denominata customersBindingSource.

    • Un'istanza di BindingNavigator denominata customersBindingNavigator. È possibile eliminare questo controllo in quanto non necessario.

    • Un oggetto ComboBox con associazione a dati denominato CustomerID.

    • Un oggetto Label.

  3. Trascinare la proprietà di navigazione Orders nel form.

  4. Verrà creato il controllo ordersBindingSource con la proprietà DataSource impostata su customersBindingSource e la proprietà DataMember impostata su Customers. Nel form verrà inoltre creato il controllo con associazione a dati ordersDataGridView, accompagnato da un controllo etichetta con il titolo appropriato.

  5. (Facoltativo) Trascinare elementi aggiuntivi dal nodo Customers nella finestra di progettazione.

  6. Aprire la tabella codici per il form e aggiungere le istruzioni using seguenti (Imports in Visual Basic):

    Imports System.Data.Services.Client
    Imports NorthwindClient.Northwind
    
    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.

    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. Nella finestra di progettazione dei form fare doppio clic sul form.

    Verrà visualizzata la tabella codici per il form e verrà creato il metodo che gestisce l'evento Load per il form.

  9. Nel gestore di eventi Load copiare e incollare il codice riportato di seguito.

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

Vedere anche

Attivitá

Procedura: associare dati a elementi Windows Presentation Foundation (WCF Data Services)

Altre risorse

Client dati (WCF Data Services)