Condividi tramite


Procedura: eseguire il commit delle modifiche in corso nei controlli con associazione a dati prima del salvataggio dei dati

Quando si modificano i valori nei controlli con associazione a dati, è necessario spostarsi dal record corrente per eseguire il commit del valore aggiornato nell'origine dati sottostante a cui è associato il controllo.Quando si trascinano gli elementi dalla Origini dati (finestra) in un form, il primo elemento rilasciato genera il codice nell'evento Click del pulsante Salva di BindingNavigator.Il codice chiama il metodo EndEdit dell'oggetto BindingSource.Pertanto, la chiamata al metodo EndEdit viene generata solo per il primo oggetto BindingSource aggiunto al form.

La chiamata al metodo EndEdit esegue il commit di tutte le modifiche in corso nei controlli con associazione a dati che si stanno modificando.Pertanto, se un controllo con associazione a dati ha lo stato attivo e si fa clic sul pulsante Salva, prima del salvataggio effettivo verrà eseguito il commit di tutte le modifiche in sospeso nel controllo (metodo TableAdapterManager.UpdateAll).

È possibile configurare l'applicazione in modo da eseguire automaticamente il commit delle modifiche, anche se un utente tenta di salvare i dati senza eseguire il commit delle modifiche, come parte del processo di salvataggio.

[!NOTA]

La finestra di progettazione aggiunge il codice BindingSource.EndEdit solo per il primo elemento rilasciato in un form.Pertanto, è necessario aggiungere una riga di codice per chiamare il metodo EndEdit per ogni oggetto BindingSource nel form.È possibile aggiungere manualmente una riga di codice per chiamare il metodo EndEdit per ogni oggetto BindingSource.In alternativa, è possibile aggiungere il metodo EndEditOnAllBindingSources al form e chiamarlo prima di eseguire un salvataggio.

Nel codice seguente viene utilizzata una query LINQ (Language-Integrated Query) per scorrere tutti i componenti BindingSource e chiamare il metodo EndEdit per ogni oggetto BindingSource in un form.

Per chiamare il metodo EndEdit per tutti i componenti BindingSource in un form

  1. Aggiungere il codice seguente al form contenente i componenti BindingSource.

    Private Sub EndEditOnAllBindingSources()
        Dim BindingSourcesQuery = From bindingsources In Me.components.Components 
                      Where (TypeOf bindingsources Is Windows.Forms.BindingSource) 
                      Select bindingsources
    
        For Each bindingSource As Windows.Forms.BindingSource In BindingSourcesQuery
            bindingSource.EndEdit()
        Next
    End Sub
    
    private void EndEditOnAllBindingSources()
    {
        var BindingSourcesQuery =
            from Component bindingSources in this.components.Components
            where bindingSources is BindingSource
            select bindingSources;
    
        foreach (BindingSource bindingSource in BindingSourcesQuery)
        {
            bindingSource.EndEdit();
        }
    }
    
  2. Aggiungere la seguente riga di codice prima di qualsiasi chiamata per salvare i dati del form (metodo TableAdapterManager.UpdateAll()):

    Me.EndEditOnAllBindingSources()
    
    EndEditOnAllBindingSources();
    

Vedere anche

Riferimenti

Cenni preliminari sul componente BindingSource

Concetti

Cenni preliminari sull'aggiornamento gerarchico

Panoramica di TableAdapterManager

Cenni preliminari sugli oggetti TableAdapter