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
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).
Nella finestra Origini dati espandere il nodo Customers nell'origine dati del progetto NorthwindEntities.
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:
Un elemento CollectionViewSource denominato customersViewSource. La proprietà DataContext dell'elemento oggetto Grid di primo livello viene impostata sul nuovo oggetto CollectionViewSource.
Un oggetto ComboBox con associazione a dati denominato CustomerID.
Un oggetto Label.
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.
(Facoltativo) Trascinare elementi aggiuntivi dal nodo Customers nella finestra di progettazione.
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;
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/";
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.
Nella finestra Proprietà selezionare il pulsante Eventi.
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.
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()); }
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
Nella finestra Origini dati espandere il nodo Customers nell'origine dati del progetto NorthwindEntities.
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.
Trascinare la proprietà di navigazione Orders nel form.
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.
(Facoltativo) Trascinare elementi aggiuntivi dal nodo Customers nella finestra di progettazione.
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;
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/";
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.
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()); }
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)