Freigeben über


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

Hinweis

Datasets und verwandte Klassen sind ältere .NET-Technologien aus den frühen 2000er Jahren, die es Anwendungen ermöglichen, mit Daten im Arbeitsspeicher zu arbeiten, während die Anwendungen von der Datenbank getrennt sind. Die Technologien sind besonders nützlich für Anwendungen, die es Benutzern ermöglichen, Daten zu ändern und die Änderungen wieder in der Datenbank zu speichern. Obwohl sich Datasets als sehr erfolgreiche Technologie erwiesen haben, empfehlen wir, dass neue .NET-Anwendungen Entity Framework Core verwenden. Entity Framework bietet eine natürlichere Möglichkeit, mit tabellarischen Daten als Objektmodelle zu arbeiten, und verfügt über eine einfachere Programmierschnittstelle.

Beim Bearbeiten von Werten in datengebundenen Steuerelementen müssen Benutzer vom aktuellen Datensatz aus navigieren, um den aktualisierten Wert für die zugrunde liegende Datenquelle zu committen, an die das Steuerelement gebunden ist. Wenn Sie Elemente aus dem Datenquellenfenster auf ein Formular ziehen, generiert das erste Element, das Sie ablegen, Code für das Klickereignis der Schaltfläche Speichern von BindingNavigator. Dieser Code ruft die EndEdit-Methode der BindingSourceauf. Daher wird der Aufruf der EndEdit-Methode nur für die erste BindingSource generiert, die dem Formular hinzugefügt wird.

Der Aufruf EndEdit führt ein Commit aller Änderungen durch, die in irgendeinem datengebundenen Steuerelement ablaufen, das derzeit bearbeitet wird. Wenn also ein datengebundenes Steuerelement den Fokus noch besitzt und Sie auf Speichern klicken, werden alle ausstehenden Bearbeitungen in diesem Steuerelement committet, bevor der eigentliche Speichervorgang durchgeführt wird (die TableAdapterManager.UpdateAll-Methode).

Sie können Ihre Anwendung so konfigurieren, dass sie Änderungen automatisch committet, auch wenn ein Benutzer versucht, Daten zu speichern, ohne die Änderungen zu committen, und zwar als Teil des Speichervorgangs.

Hinweis

Der Designer fügt den BindingSource.EndEdit-Code nur für das erste Element hinzu, das auf einem Formular abgelegt wird. Sie müssen deshalb eine Codezeile zum Aufruf der EndEdit-Methode für jede BindingSource auf dem Formular hinzufügen. Sie können manuell eine Codezeile hinzufügen, um die EndEdit-Methode für jede BindingSource aufzurufen. Alternativ können Sie dem Formular die EndEditOnAllBindingSources-Methode hinzufügen und diese aufrufen, bevor Sie einen Speichervorgang durchführen.

Der folgende Code verwendet eine LINQ-Abfrage (Language Integrated Query), um alle BindingSource-Komponenten zu durchlaufen und die EndEdit-Methode für jede BindingSource in einem Formular aufzurufen.

So rufen Sie EndEdit für alle BindingSource-Komponenten in einem Formular auf

  1. Fügen Sie dem Formular den folgenden Code hinzu, der 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();
        }
    }
    
  2. Fügen Sie die folgende Codezeile unmittelbar vor Aufrufen hinzu, um die Daten des Formulars (die TableAdapterManager.UpdateAll()-Methode) zu speichern:

    EndEditOnAllBindingSources();