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

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

Übersicht über TableAdapterManager

Übersicht über TableAdapters