Associare i dati ai controlli nelle soluzioni Office

È possibile associare i controlli Windows Form e i controlli host in un documento di Microsoft Office Word o in un foglio di lavoro di Microsoft Office Excel a un'origine dati in modo da visualizzare automaticamente i dati. È possibile associare dati ai controlli nei progetti a livello di applicazione e a livello di documento.

Si applica a: le informazioni contenute in questo argomento si applicano ai progetti a livello di documento e ai progetti di componente aggiuntivo VSTO. Vedere Funzionalità disponibili per app Office lication e tipo di progetto.

I controlli host consentono di estendere gli oggetti contenuti nei modelli a oggetti di Word ed Excel, ad esempio i controlli del contenuto in Word e gli intervalli denominati in Excel. Per altre informazioni, vedere Panoramica degli elementi host e dei controlli host.

I controlli Windows Form e i controlli host usano il modello di data binding di Windows Form, che supporta sia il data binding semplice , sia il data binding complesso a origini dati quali set di dati e tabelle dati. Per informazioni complete sul modello di data binding in Windows Form, vedere Associazione dati e Windows Form.

Data binding semplice

Il data binding semplice si verifica quando una proprietà controllo è associata a un singolo elemento dati, come un valore in una tabella dati. Ad esempio, il controllo NamedRange ha una proprietà Value2 che può essere associata a un campo in un set di dati. Quando il campo all'interno del set di dati viene modificato, cambia anche il valore nell'intervallo denominato. Tutti i controlli host, tranne XMLNodes , supportano il data binding semplice. Il controllo XMLNodes è una raccolta e pertanto non supporta il data binding.

Per eseguire il data binding semplice su un controllo host, aggiungere un oggetto Binding alla proprietà DataBindings del controllo. Un oggetto Binding rappresenta l'associazione semplice tra il valore di una proprietà del controllo e il valore dell'elemento dati.

L'esempio di codice seguente dimostra come associare la proprietà Value2 a un elemento dati in un progetto a livello di documento.

Binding binding1 = new Binding("Value2", ds, "Customers.Names", true);
namedRange1.DataBindings.Add(binding1);

Per le procedure dettagliate che illustrano il data binding semplice, vedere Procedura dettagliata: Data binding semplice in un progetto a livello di documento per un progetto a livello di documento e Procedura dettagliata: Data binding semplice nel progetto di componente aggiuntivo VSTO per un progetto di componente aggiuntivo VSTO.

Data binding complesso

Il data binding complesso si verifica quando una proprietà controllo è associata a più elementi dati, ad esempio più colonne in una tabella dati. Il controllo ListObject per Excel è l'unico controllo host che supporta il data binding complesso. Esistono anche numerosi controlli Windows Form che supportano il data binding complesso, ad esempio il controllo DataGridView .

Per eseguire il data binding complesso, impostare la proprietà DataSource del controllo su un oggetto origine dati supportato dal data binding complesso. Ad esempio, la proprietà DataSource del controllo ListObject può essere associata a più colonne in una tabella dati. Tutti i dati nella tabella dati vengono visualizzati nel controllo ListObject e quando cambiano i dati nella tabella dati, cambia anche l'oggetto ListObject . Per un elenco delle origini dati che è possibile usare per il data binding complesso, vedere Origini dati supportate da Windows Form.

L'esempio di codice seguente crea un oggetto DataSet con due oggetti DataTable e popola una delle tabelle con dati. Il codice associa quindi l'oggetto ListObject alla tabella che contiene i dati. Questo esempio si riferisce a un progetto a livello di documento di Excel.

private void ListObject_DataSourceAndMember()
{
    // Create a DataSet and two DataTables.
    DataSet ordersDataSet = new DataSet("ordersDataSet");
    DataTable tableCustomers = new DataTable("Customers");
    DataTable tableProducts = new DataTable("Products");
    ordersDataSet.Tables.Add(tableCustomers);
    ordersDataSet.Tables.Add(tableProducts);

    // Add a data to the Customers DataTable.
    tableCustomers.Columns.Add(new DataColumn("LastName"));
    tableCustomers.Columns.Add(new DataColumn("FirstName"));
    DataRow dr = tableCustomers.NewRow();
    dr["LastName"] = "Chan";
    dr["FirstName"] = "Gareth";
    tableCustomers.Rows.Add(dr);

    // Create a list object.
    Microsoft.Office.Tools.Excel.ListObject list1 = 
        this.Controls.AddListObject(
        this.Range["A1"], "Customers");

    // Bind the list object to the Customers table.
    list1.AutoSetDataBoundColumnHeaders = true;
    list1.DataSource = ordersDataSet;
    list1.DataMember = "Customers";
}

Per una procedura dettagliata che illustra il data binding complesso, vedere Procedura dettagliata: Data binding complesso in un progetto a livello di documento per un progetto a livello di documento.

Visualizzare i dati nei documenti e nelle cartelle di lavoro

Nei progetti a livello di documento è possibile usare la finestra di dialogo Origini dati per aggiungere facilmente controlli associati a dati ai documenti o alle cartelle di lavoro, mediante una procedura analoga a quella usata per i Windows Form. Per altre informazioni sull'uso della finestra Origini dati, vedere Associare controlli Windows Form ai dati in Visual Studio e Aggiungere nuove origini dati.

Trascinare i controlli dalla finestra Origini dati

Nel documento viene creato un controllo quando vi si trascina un oggetto dalla finestra Origini dati . Il tipo di controllo che viene creato varia a seconda del fatto che si associ una solo colonna o più colonne di dati.

Per Excel, nel foglio di lavoro viene creato un controllo NamedRange per ogni campo e un controllo ListObject per ogni intervallo di dati che include più righe e colonne. Questa impostazione predefinita può essere modificata selezionando la tabella o il campo nella finestra Origini dati e scegliendo un controllo diverso dall'elenco a discesa.

Viene aggiunto un controllo ContentControl ai documenti. Il tipo di controllo contenuto dipende dal tipo di dati del campo selezionato.

Associare i dati nei progetti a livello di documento in fase di progettazione

Gli argomenti seguenti mostrano esempi di data binding in fase di progettazione:

Associare i dati nei progetti di componente aggiuntivo VSTO

Nei progetti di componente aggiuntivo VSTO è possibile aggiungere controlli solo in fase di esecuzione. Gli argomenti seguenti mostrano esempi di data binding in fase di esecuzione:

Aggiornare i dati associati ai controlli host

Il data binding tra un'origine dati e un controllo host comporta un aggiornamento bidirezionale dei dati. Nel data binding semplice, le modifiche apportate all'origine dati si riflettono automaticamente nel controllo host, mentre quelle apportate al controllo host richiedono una chiamata esplicita per aggiornare l'origine dati. Il motivo è che in alcuni casi le modifiche apportate a un campo associato a dati non vengono accettate se non sono accompagnate da modifiche a un altro campo associato a dati. Si considerino, ad esempio, due campi, uno relativo all'età e un altro relativo agli anni di esperienza. L'esperienza non può superare l'età. Non è possibile aggiornare l'età da 50 a 25 e poi l'esperienza da 30 a 10 a meno che le modifiche non vengano apportate contemporaneamente. Per risolvere il problema, i campi con data binding semplice non vengono aggiornati finché gli aggiornamenti non vengono inviati in maniera esplicita dal codice.

Per aggiornare un'origine dati da controlli host che consentono il data binding semplice, è necessario inviare gli aggiornamenti all'origine dati in memoria (ad esempio un oggetto DataSet o DataTable) e al database back-end, se usato nella soluzione.

Non è necessario aggiornare in modo esplicito l'origine dati in memoria quando si esegue il data binding complesso usando il controllo ListObject . In quel caso, le modifiche vengono inviate automaticamente all'origine dati in memoria senza codice aggiuntivo.

Per altre informazioni, vedere Procedura: Aggiornare un'origine dati con i dati di un controllo host.