Gewusst wie: Ausführen eines Commits für aktuelle Bearbeitungen von datengebundenen Steuerelementen vor dem Speichern von Daten
Wenn Werte in datengebundenen Steuerelementen bearbeitet werden, müssen die Benutzer vom aktuellen Datensatz weg navigieren, um den aktualisierten Wert in die zugrunde liegende Datenquelle zu übernehmen, an die das Steuerelement gebunden ist. Wenn Sie Elemente aus dem Datenquellenfenster auf ein Formular ziehen, generiert das erste abgelegte Element Code im BindingNavigator-Klickereignis für die Schaltfläche zum Speichern. Dieser Code ruft die EndEdit-Methode der BindingSource auf. Daher wird der Aufruf der EndEdit-Methode nur für die erste BindingSource generiert, die dem Formular hinzugefügt wird.
Durch den EndEdit-Aufruf wird für sämtliche anstehenden Änderungen in allen gegenwärtig bearbeiteten datengebundenen Steuerelementen ein Commit ausgeführt. Wenn das datengebundene Steuerelement daher immer noch über den Fokus verfügt und Sie auf die Schaltfläche Speichern klicken, wird vor dem eigentlichen Speichern für sämtliche anstehenden Bearbeitungen im Steuerelement ein Commit ausgeführt (TableAdapterManager.UpdateAll-Methode).
Sie können die Anwendung so konfigurieren, dass für Änderungen während des Speichervorgangs automatisch ein Commit ausgeführt wird, auch wenn ein Benutzer versucht, Daten ohne Ausführen eines Commits für die Änderungen zu speichern.
Tipp
Der Designer fügt den BindingSource.EndEdit-Code nur für das erste Element hinzu, das auf einem Formular abgelegt wird. Daher müssen Sie eine Codezeile hinzufügen, um die EndEdit-Methode für jede BindingSource auf dem Formular aufzurufen. Sie können manuell eine Codezeile hinzufügen, um die EndEdit-Methode für jede BindingSource aufzurufen. Es ist auch möglich, dem Formular die EndEditOnAllBindingSources-Methode hinzuzufügen und sie vor dem Speichern aufzurufen.
Der folgende Code verwendet eine LINQ (Language-Integrated Query, sprachintegrierte Abfrage), um alle BindingSource-Komponenten zu durchlaufen und die EndEdit-Methode für jede BindingSource auf einem Formular aufzurufen.
So rufen Sie EndEdit für alle BindingSource-Komponenten auf einem Formular auf
Fügen Sie den folgenden Code dem Formular hinzu, das die BindingSource-Komponenten enthält.
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(); } }
Fügen Sie die folgende Codezeile unmittelbar vor Aufrufen zum Speichern der Formulardaten hinzu (TableAdapterManager.UpdateAll()-Methode):
Me.EndEditOnAllBindingSources()
EndEditOnAllBindingSources();
Siehe auch
Referenz
Übersicht über die BindingSource-Komponente
Konzepte
Übersicht über die hierarchische Aktualisierung