Gewusst wie: Ausführen eines Commits für aktuelle Bearbeitungen von datengebundenen Steuerelementen vor dem Speichern von Daten

 

Veröffentlicht: Juli 2016

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.

Hinweis

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), 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

  1. Fügen Sie den folgenden Code dem Formular hinzu, das die BindingSource-Komponenten enthält.

            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
    
  2. Fügen Sie die folgende Codezeile unmittelbar vor Aufrufen zum Speichern der Formulardaten hinzu (TableAdapterManager.UpdateAll()-Methode):

                EndEditOnAllBindingSources();
    
            Me.EndEditOnAllBindingSources()
    

Siehe auch

Übersicht über die hierarchische Aktualisierung
Übersicht über TableAdapterManager
Übersicht über TableAdapters
Übersicht über die BindingSource-Komponente