Procedura: eseguire il commit delle modifiche in corso nei controlli con associazione a dati prima del salvataggio dei dati
Data di pubblicazione: aprile 2016
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
Aggiungere il codice seguente al form contenente i componenti BindingSource.
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(); } }
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
Aggiungere la seguente riga di codice prima di qualsiasi chiamata per salvare i dati del form (metodo
TableAdapterManager.UpdateAll()
):EndEditOnAllBindingSources();
Me.EndEditOnAllBindingSources()
Vedere anche
Cenni preliminari sull'aggiornamento gerarchico
Panoramica di TableAdapterManager
Cenni preliminari sugli oggetti TableAdapter
Cenni preliminari sul componente BindingSource