Share via


Aggiornare un'origine dati con dati da un controllo host

È possibile associare un controllo host a un'origine dati e aggiornare l'origine dati con le modifiche apportate ai dati nel controllo. Questo processo prevede due passaggi principali:

  1. Aggiornare l'origine dati in memoria con i dati modificati nel controllo. In genere, l'origine dati in memoria è un oggetto DataSet, DataTableo un altro oggetto dati.

  2. Aggiornare il database con i dati modificati nell'origine dati in memoria. Ciò è possibile solo se l'origine dati è connessa a un database back-end, ad esempio un database SQL Server o Microsoft Office Access.

    Per altre informazioni sui controlli host e sul data binding, vedere Panoramica degli elementi host e controlli host e Associare i dati ai controlli nelle soluzioni Office.

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

Aggiornare l'origine dati in memoria

Per impostazione predefinita, i controlli host che consentono il data binding semplice (ad esempio i controlli contenuto in un documento di Word o un controllo di intervallo denominato in un foglio di lavoro di Excel) non salvano le modifiche all'origine dati in memoria. In altre parole, quando un utente finale modifica un valore in un controllo host e successivamente si sposta dal controllo, il nuovo valore del controllo non viene salvato nell'origine dati.

Per salvare i dati nell'origine dati, è possibile scrivere codice che consenta di aggiornare l'origine dati in risposta a un evento specifico in fase di esecuzione oppure configurare il controllo in modo che l'origine dati venga aggiornata automaticamente quando si modifica il valore nel controllo.

Non è necessario salvare le modifiche apportate a ListObject nell'origine dati in memoria. Quando si associa un controllo ListObject ai dati, il controllo ListObject salva automaticamente le modifiche nell'origine dati in memoria senza che sia richiesto codice aggiuntivo.

Per aggiornare l'origine dati in memoria in fase di esecuzione

  • Chiamare il metodo WriteValue dell'oggetto Binding che associa il controllo all'origine dati.

    Nell'esempio seguente le modifiche apportate a un controllo NamedRange in un foglio di lavoro di Excel vengono salvate nell'origine dati. Questo esempio presuppone che sia presente un controllo NamedRange denominato namedRange1 la cui proprietà Value2 è associata a un campo in un'origine dati.

    this.namedRange1.DataBindings["Value2"].WriteValue();
    

Aggiornare automaticamente l'origine dati in memoria

È anche possibile configurare un controllo in modo da aggiornare automaticamente l'origine dati in memoria. In un progetto a livello di documento, questa operazione può essere eseguita tramite codice o tramite la finestra di progettazione. In un progetto di componente aggiuntivo VSTO è necessario usare il codice.

Per impostare un controllo in modo che l'origine dati in memoria venga aggiornata automaticamente tramite codice

  1. Utilizzare la modalità System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged dell'oggetto Binding che associa il controllo all'origine dati. Per aggiornare l'origine dati è possibile procedere in due modi:

    • Per aggiornare l'origine dati quando il controllo viene convalidato, impostare questa proprietà su System.Windows.Forms.DataSourceUpdateMode.OnValidation.

    • Per aggiornare l'origine dati quando viene modificato il valore della proprietà associata a dati del controllo, impostare questa proprietà su System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged.

      Nota

      L'opzione System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged non si applica ai controlli host di Word, perché Word non offre notifiche di modifica del documento o di modifica del controllo. ma può essere usata per i controlli Windows Form nei documenti di Word.

      L'esempio seguente configura un controllo NamedRange in modo che l'origine dati venga aggiornata automaticamente quando si modifica il valore del controllo. Questo esempio presuppone che sia presente un controllo NamedRange denominato namedRange1 la cui proprietà Value2 è associata a un campo in un'origine dati.

      this.namedRange1.DataBindings["Value2"].DataSourceUpdateMode = 
          DataSourceUpdateMode.OnPropertyChanged;
      

Per impostare un controllo in modo che l'origine dati in memoria venga aggiornata automaticamente tramite la finestra di progettazione

  1. In Visual Studio, aprire il documento di Word o la cartella di lavoro di Excel nella finestra di progettazione.

  2. Fare clic sul controllo desiderato per aggiornare automaticamente l'origine dati.

  3. Nella finestra Proprietà espandere la proprietà (DataBindings) .

  4. Accanto alla proprietà (Avanzate) fare clic sul pulsante con i puntini di sospensione (VisualStudioEllipsesButton screenshot).

  5. Nella finestra di dialogo Formattazione e associazione avanzata fare clic nell'elenco a discesa Modalità aggiornamento origine dati e selezionare uno dei valori seguenti:

    • Per aggiornare l'origine dati quando il controllo viene convalidato, selezionare OnValidation.

    • Per aggiornare l'origine dati quando si modifica il valore della proprietà del controllo associata ai dati, selezionare OnPropertyChanged.

      Nota

      L'opzione OnPropertyChanged non si applica ai controlli host di Word perché Word non fornisce notifiche relative alle modifiche al documento o al controllo, ma può essere usata per i controlli Windows Form nei documenti di Word.

  6. Chiudere la finestra di dialogo Formattazione e associazione avanzata .

Aggiornare il database

Se l'origine dati in memoria è associata a un database, è necessario aggiornare il database in base alle modifiche apportate all'origine dati. Per altre informazioni sull'aggiornamento di un database, vedere Salvare nuovamente i dati nel database e Aggiornare i dati tramite tableAdapter .

Per aggiornare il database

  1. Chiamare il metodo EndEdit per il controllo BindingSource .

    L'oggetto BindingSource viene generato automaticamente quando un controllo associato a dati viene aggiunto a un documento o a una cartella di lavoro in fase di progettazione. L'oggetto BindingSource connette il controllo al set di dati tipizzato nel progetto. Per altre informazioni, vedere Cenni preliminari sul componente BindingSource.

    L'esempio di codice seguente presuppone che il progetto contenga un oggetto BindingSource denominato customersBindingSource.

    this.customersBindingSource.EndEdit();
    
  2. Chiamare il Update metodo dell'oggetto TableAdapter generato nel progetto.

    TableAdapter viene generato automaticamente quando si aggiunge un controllo associato a dati a un documento o a una cartella di lavoro in fase di progettazione. TableAdapter connette il set di dati tipizzato nel progetto al database. Per altre informazioni, vedere Panoramica di TableAdapter.

    Nell'esempio di codice seguente si presuppone che si abbia una connessione alla tabella Customers nel database Northwind e che il progetto contenga un tableAdapter denominato customersTableAdapter e un set di dati tipizzato denominato northwindDataSet.

    this.customersTableAdapter.Update(this.northwindDataSet.Customers);