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
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(); } }
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