Freigeben über


Architektur der BindingSource-Komponente

Mit der BindingSource-Komponente können Sie alle Windows Forms-Steuerelemente universell an Datenquellen binden.

Die BindingSource-Komponente vereinfacht das Binden von Steuerelementen an eine Datenquelle und bietet gegenüber der herkömmlichen Datenbindung die folgenden Vorteile:

  • Das Binden an Geschäftsobjekte zur Entwurfszeit wird ermöglicht.

  • Die CurrencyManager-Funktion wird gekapselt und CurrencyManager-Ereignisse werden zur Entwurfszeit verfügbar gemacht.

  • Das Erstellen einer Liste, die die IBindingList-Schnittstelle unterstützt, wird erleichtert, indem Listenänderungsbenachrichtigungen für Datenquellen bereitgestellt werden, die keine systemeigenen Listenänderungsbenachrichtigungen unterstützen.

  • Ein Erweiterungspunkt für die IBindingList.AddNew-Methode wird bereitgestellt.

  • Eine Dereferenzierungsebene zwischen Datenquelle und Steuerelement wird bereitgestellt. Diese Dereferenzierung ist wichtig, wenn sich die Datenquelle zur Laufzeit ändern kann.

  • Arbeitet mit anderen datenbezogenen Windows Forms-Steuerelementen zusammen, insbesondere mit BindingNavigator und DataGridView.

Aus diesen Gründen ist die BindingSource-Komponente die bevorzugte Methode, die Windows Forms-Steuerelemente an Datenquellen zu binden.

BindingSource-Features

Die BindingSource-Komponente stellt eine Reihe von Features zum Binden von Steuerelementen an Daten bereit. Mit diesen Features können Sie die meisten Datenbindungsszenarien mit einem sehr geringen Codierungsaufwand implementieren.

Die BindingSource-Komponente stellt zu diesem Zweck eine konsistente Schnittstelle für den Zugriff auf viele verschiedene Arten von Datenquellen bereit. Dies bedeutet, dass Sie die gleiche Prozedur verwenden wie für das Binden an einen beliebigen Typ. Beispielsweise können Sie die DataSource-Eigenschaft an ein DataSet oder ein Geschäftsobjekt binden und in beiden Fällen die Datenquelle mithilfe der gleichen Eigenschaften, Methoden und Ereignisse bearbeiten.

Die konsistente Schnittstelle, die von der BindingSource-Komponente bereitgestellt wird, vereinfacht das Binden von Daten an Steuerelemente erheblich. Für Datenquellentypen, die Änderungsbenachrichtigungen bereitstellen, übermittelt die BindingSource-Komponente automatisch Änderungen zwischen dem Steuerelement und der Datenquelle. Für Datenquellentypen, die keine Änderungsbenachrichtigungen unterstützen, werden Ereignisse bereitgestellt, mit denen Sie Änderungsbenachrichtigungen auslösen können. Die folgende Liste zeigt die von der BindingSource-Komponente unterstützten Features:

Dereferenzierung

Die BindingSource-Komponente stellt zwischen einem Steuerelement und einer Datenquelle eine Dereferenzierungsebene bereit. Anstatt ein Steuerelement direkt an eine Datenquelle zu binden, binden Sie es an eine BindingSource und ordnen die Datenquelle der DataSource-Eigenschaft der BindingSource-Komponente zu.

Mit dieser Dereferenzierungsebene können Sie die Datenquelle ändern, ohne die Steuerelementbindung zurückzusetzen. Dadurch haben Sie folgende Möglichkeiten:

Währungsverwaltung

Die BindingSource-Komponente implementiert die ICurrencyManagerProvider-Schnittstelle zur automatischen Behandlung der Währungsverwaltung. Zusätzlich können Sie mit der ICurrencyManagerProvider-Schnittstelle neben dem Währungs-Manager für eine BindingSource auf den Währungs-Manager für eine weitere BindingSource zugreifen, die an denselben DataMember gebunden ist.

Die BindingSource-Komponente kapselt die CurrencyManager-Funktion und macht die gängigsten CurrencyManager-Eigenschaften und -Ereignisse verfügbar. In der folgenden Tabelle werden einige Member beschrieben, die zur Währungsverwaltung gehören.

  • CurrencyManager-Eigenschaft
    Ruft den Währungs-Manager ab, der der BindingSource zugeordnet ist.

  • GetRelatedCurrencyManager-Methode
    Wenn eine weitere BindingSource an den angegebenen Datenmember gebunden ist, wird der zugehörige Währungs-Manager abgerufen.

  • Current-Eigenschaft
    Ruft das aktuelle Element der Datenquelle ab.

  • Position-Eigenschaft
    Ruft die aktuelle Position in der zugrunde liegenden Liste ab bzw. legt diese fest.

  • EndEdit-Methode
    Wendet anstehende Änderungen auf die zugrunde liegende Datenquelle an.

  • CancelEdit-Methode
    Bricht den aktuellen Bearbeitungsvorgang ab.

Datenquelle als Liste

Die BindingSource-Komponente implementiert die IBindingListView-Schnittstelle und die ITypedList-Schnittstelle. Mit dieser Implementierung können Sie die BindingSource-Komponente selbst als Datenquelle verwenden, ohne einen externen Speicher.

Wenn die BindingSource-Komponente einer Datenquelle zugeordnet ist, macht sie die Datenquelle als Liste verfügbar.

Die DataSource-Eigenschaft kann auf mehrere Datenquellen festgelegt werden. Hierzu gehören Typen, Objekte und Typenlisten. Die sich ergebende Datenquelle wird als Liste verfügbar gemacht. In der folgenden Tabelle werden einige gängige Datenquellen und die daraus resultierende Listenauswertung angezeigt.

DataSource-Eigenschaft

Listenergebnis

Ein Nullverweis (Nothing in Visual Basic)

Eine leere IBindingList der Objekte. Durch das Hinzufügen eines Elements wird die Liste auf den Typ des hinzugefügten Elements festgelegt.

Ein Nullverweis (Nothing in Visual Basic) mit festgelegtem DataMember

Nicht unterstützt; löst ArgumentException aus.

Kein Listentyp oder Objekt vom Typ "T"

Eine leere IBindingList vom Typ "T".

Arrayinstanz

Eine IBindingList, die die Arrayelemente enthält.

IEnumerable-Instanz

Eine IBindingList, die die IEnumerable-Elemente enthält

Listeninstanz, die den Typ "T" enthält

Eine IBindingList-Instanz, die den Typ "T" enthält.

Darüber hinaus kann DataSource auf andere Listentypen wie IListSource und ITypedList festgelegt werden. Diese werden von BindingSource korrekt behandelt. Der in der Liste enthaltene Typ sollte in diesem Fall über einen Standardkonstruktor verfügen.

BindingSource als IBindingList

Die BindingSource-Komponente stellt Member zum Aufrufen und Bearbeiten der zugrunde liegenden Daten als IBindingList bereit. In der folgenden Tabelle werden einige dieser Member beschrieben.

Member

Beschreibung

List-Eigenschaft

Ruft die Liste ab, die sich aus der Auswertung der DataSource-Eigenschaft oder der DataMember-Eigenschaft ergibt.

AddNew-Methode

Fügt der zugrunde liegenden Liste ein neues Element hinzu. Gilt für Datenquellen, die die IBindingList-Schnittstelle implementieren und das Hinzufügen von Elementen ermöglichen (d. h., die AllowNew-Eigenschaft ist auf true festgelegt).

Benutzerdefinierte Elementerstellung

Sie können das AddingNew-Ereignis behandeln, um ihre eigene Elementerstellungslogik bereitzustellen. Das AddingNew-Ereignis tritt auf, bevor der BindingSource ein neues Objekt hinzugefügt wird. Dieses Ereignis wird ausgelöst, nachdem die AddNew-Methode aufgerufen wurde, jedoch bevor das neue Element der zugrunde liegenden Liste hinzugefügt wird. Indem Sie dieses Ereignis behandeln, können Sie benutzerdefiniertes Elementerstellungsverhalten bereitstellen, ohne von der BindingSource-Klasse abzuleiten. Weitere Informationen hierzu finden Sie unter Gewusst wie: Anpassen der Hinzufügung von Elementen mithilfe der BindingSource von Windows Forms.

Transaktionale Elementerstellung

Die BindingSource-Komponente implementiert die ICancelAddNew-Schnittstelle, die eine transaktionale Elementerstellung ermöglicht. Nachdem ein neues Element durch einen Aufruf von AddNew vorläufig erstellt wurde, kann für diese Hinzufügung auf folgende Weise ein Commit oder Rollback ausgeführt werden:

  • Die EndNew-Methode führt explizit einen Commit für die anstehende Hinzufügung aus.

  • Wenn eine andere Auflistungsoperation ausgeführt wird, z. B. Einfügen, Löschen oder Verschieben, wird für die anstehende Hinzufügung ein indirekter Commit ausgeführt.

  • Die CancelNew-Methode führt einen Rollback für die ausstehende Hinzufügung aus, sofern für die Methode noch kein Commit ausgeführt wurde.

IEnumerable-Unterstützung

Die BindingSource-Komponente ermöglicht das Binden von Steuerelementen an IEnumerable-Datenquellen. Mit dieser Komponente können Sie an eine Datenquelle wie System.Data.SqlClient.SqlDataReader binden.

Wenn eine IEnumerable-Datenquelle der BindingSource-Komponente zugeordnet ist, erstellt die BindingSource eine IBindingList und fügt den Inhalt der IEnumerable-Datenquelle zur Liste hinzu.

Unterstützung zur Entwurfszeit

Einige Objekttypen können zur Entwurfszeit nicht erstellt werden, z. B. Objekte, die aus einer Factoryklasse erstellt oder von einem Webdienst zurückgegeben werden. Gegebenenfalls müssen Sie die Steuerelemente zur Entwurfszeit an diese Typen binden, auch wenn sich im Arbeitsspeicher kein Objekt befindet, an das die Steuerelemente gebunden werden können. Beispielsweise müssen Sie die Spaltenheader eines DataGridView-Steuerelements mit den Namen der öffentlichen Eigenschaften des benutzerdefinierten Typs bezeichnen.

Um dieses Szenario zu unterstützen, wird von der BindingSource-Komponente das Binden an einen Type unterstützt. Wenn Sie der DataSource-Eigenschaft einen Type zuordnen, erstellt die BindingSource-Komponente eine leere BindingList<T> von Type-Elementen. Für alle Steuerelemente, die Sie nachfolgend an die BindingSource-Komponente binden, werden zur Entwurfszeit oder zur Laufzeit Warnungen über das Vorhandensein der Eigenschaften oder des Schemas für den Typ ausgegeben. Weitere Informationen hierzu finden Sie unter Gewusst wie: Binden eines Windows Forms-Steuerelements an einen Typ.

Statische ListBindingHelper-Methoden

Die Typen System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager und BindingSource verfügen über eine gemeinsame Logik zum Generieren einer Liste aus einem DataSource/DataMember-Paar. Diese gemeinsame Logik wird außerdem für Autoren von Steuerelementen und andere Dritte in den folgenden static-Methoden öffentlich verfügbar gemacht:

Sortieren und Filtern mit der IBindingListView-Schnittstelle

Die BindingSource-Komponente implementiert die IBindingListView-Schnittstelle, die die IBindingList-Schnittstelle erweitert. Die IBindingList ermöglicht das Sortieren einzelner Spalten, und die IBindingListView stellt erweiterte Funktionen zum Sortieren und Filtern bereit. Mit IBindingListView können Sie Elemente in der Datenquelle sortieren und filtern, wenn von der Datenquelle ebenfalls eine dieser Schnittstellen implementiert wird. Die BindingSource-Komponente stellt keine Verweisimplementierung dieser Member bereit. Stattdessen werden Aufrufe zur zugrunde liegenden Liste weitergeleitet.

In der folgenden Tabelle werden die Eigenschaften beschrieben, die Sie zum Sortieren und Filtern verwenden.

Member

Beschreibung

Filter-Eigenschaft

Wenn die Datenquelle eine IBindingListView ist, wird der Ausdruck abgerufen oder festgelegt, der zum Filtern der angezeigten Zeilen verwendet wird.

Sort-Eigenschaft

Wenn die Datenquelle eine IBindingList ist, wird ein Spaltenname abgerufen oder festgelegt, der zum Sortieren sowie für Informationen zur Sortierreihenfolge verwendet wird.

- oder -

Wenn es sich bei der Datenquelle um eine IBindingListView und erweitertes Sortieren unterstützt wird, werden mit dieser Eigenschaft mehrere Spaltennamen abgerufen, die zum Sortieren und für die Sortierreihenfolge verwendet werden.

Integration in BindingNavigator

Sie können mithilfe der BindingSource-Komponente beliebige Windows Forms-Steuerelemente an eine Datenquelle binden. Das BindingNavigator-Steuerelement wurde jedoch speziell für die Interaktion mit der BindingSource-Komponente entworfen. Das BindingNavigator-Steuerelement stellt eine Benutzeroberfläche zum Steuern des aktuellen Elements der BindingSource-Komponente bereit. Standardmäßig stellt das BindingNavigator-Steuerelement Schaltflächen bereit, die den Navigationsmethoden auf der BindingSource-Komponente entsprechen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Datennavigation mithilfe des DataNavigator-Steuerelements in Windows Forms.

Siehe auch

Aufgaben

Gewusst wie: Binden eines Windows Forms-Steuerelements an einen Typ

Gewusst wie: Kennzeichnen von Datenquellenaktualisierungen in einem Windows Forms-Steuerelement mithilfe der BindingSource

Referenz

Übersicht über die BindingSource-Komponente

BindingSource

BindingNavigator

Weitere Ressourcen

BindingNavigator-Steuerelement (Windows Forms)

Datenbindung in Web Forms

Steuerelemente für Windows Forms