Architektur der BindingSource-Komponente

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

Die BindingSource-Komponente vereinfacht den Prozess der Bindung von Steuerelementen an eine Datenquelle und hat gegenüber der herkömmlichen Datenbindung folgende Vorteile:

  • Sie ermöglicht die Bindung an Geschäftsobjekte zur Entwurfszeit.

  • Sie kapselt die CurrencyManager-Funktion und macht CurrencyManager-Ereignisse zur Entwurfszeit verfügbar.

  • Sie stellt Listenänderungsbenachrichtigungen für Datenquellen bereit, die solche Benachrichtigung nicht nativ unterstützen, und vereinfacht so das Erstellen einer Liste, die die IBindingList-Schnittstelle unterstützt.

  • Sie bietet einen Erweiterbarkeitspunkt für die IBindingList.AddNew-Methode.

  • Sie bietet eine Dereferenzierungsebene zwischen der Datenquelle und dem Steuerelement. Diese Dereferenzierung ist wichtig, wenn sich die Datenquelle zur Laufzeit ändern kann.

  • Sie interagiert mit anderen datenbezogenen Windows Forms-Steuerelementen – insbesondere mit BindingNavigator und DataGridView.

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

BindingSource-Features

Die BindingSource-Komponente bietet mehrere Features für das Binden von Steuerelementen an Daten. Mit diesen Features lassen sich die meisten Datenbindungsszenarien fast ganz ohne Programmieraufwand implementieren.

Die BindingSource-Komponente bietet eine konsistente Schnittstelle für den Zugriff auf viele verschiedene Arten von Datenquellen. Das bedeutet, dass für die Bindung an einen beliebigen Typ immer das gleiche Verfahren verwendet wird. So können Sie beispielsweise die DataSource-Eigenschaft an ein Dataset (DataSet) oder an ein Geschäftsobjekt anfügen und in beiden Fällen die gleichen Eigenschaften, Methoden und Ereignisse verwenden, um die Datenquelle zu bearbeiten.

Die von der BindingSource-Komponente bereitgestellte konsistente Schnittstelle vereinfacht die Bindung von Daten an Steuerelemente erheblich. Bei Datenquellentypen, die Änderungsbenachrichtigungen bereitstellen, kommuniziert die BindingSource-Komponente automatisch Änderungen zwischen Steuerelement und Datenquelle. Für Datenquellentypen, die keine Änderungsbenachrichtigungen bieten, werden Ereignisse bereitgestellt, mit denen Sie Änderungsbenachrichtigungen auslösen können. Die folgende Liste enthält die von der BindingSource-Komponente unterstützten Features:

Dereferenzierung

Die BindingSource-Komponente bietet eine Dereferenzierungsebene zwischen einem Steuerelement und einer Datenquelle. Anstatt ein Steuerelement direkt an eine Datenquelle zu binden, wird das Steuerelement an eine Bindungsquelle (BindingSource) gebunden, und die Datenquelle wird an die DataSource-Eigenschaft der BindingSource-Komponente angefügt.

Dank dieser Dereferenzierungsebene können Sie die Datenquelle ändern, ohne die Steuerelementbindung zurückzusetzen. Dies ermöglicht Folgendes:

Aktualitätsverwaltung

Die BindingSource-Komponente implementiert die ICurrencyManagerProvider-Schnittstelle, um Ihnen die Aktualitätsverwaltung abzunehmen. Mit der ICurrencyManagerProvider-Schnittstelle können Sie auch auf den Aktualitäts-Manager für eine Bindungsquelle (BindingSource) zugreifen – zusätzlich zum Aktualitäts-Manager für eine andere Bindungsquelle (BindingSource), die an den gleichen Datenmember (DataMember) gebunden ist.

Die BindingSource-Komponente kapselt CurrencyManager-Funktionen und macht die gängigsten CurrencyManager-Eigenschaften und -Ereignisse verfügbar. In der folgenden Tabelle werden einige der Member im Zusammenhang mit der Aktualitätsverwaltung beschrieben:

CurrencyManager-Eigenschaft
Ruft den Aktualitäts-Manager ab, der der Bindungsquelle (BindingSource) zugeordnet ist.

GetRelatedCurrencyManager-Methode
Ist eine weitere Bindungsquelle (BindingSource) an den angegebenen Datenmember gebunden, wird deren Aktualitäts-Manager abgerufen.

Current-Eigenschaft
Ruft das aktuelle Element der Datenquelle ab.

Position-Eigenschaft
Ruft die aktuelle Position in der zugrunde liegenden Liste ab oder 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 Schnittstellen IBindingListView und ITypedList. Mit dieser Implementierung können Sie die BindingSource-Komponente selbst als Datenquelle verwenden – ganz ohne externen Speicher.

Wenn die BindingSource-Komponente an eine Datenquelle angefügt ist, macht sie die Datenquelle als Liste verfügbar.

Die DataSource-Eigenschaft kann auf mehrere Datenquellen festgelegt werden. Dazu gehören Typen, Objekte und Listen von Typen. Die resultierende Datenquelle wird als Liste verfügbar gemacht. In der folgenden Tabelle sind einige der gängigen Datenquellen und die resultierende Listenauswertung aufgeführt:

DataSource-Eigenschaft Listenergebnisse
Ein NULL-Verweis (Nothing in Visual Basic). Ein leeres IBindingList-Element für Objekte. Nach dem Hinzufügen eines Elements wird die Liste auf den Typ des hinzugefügten Elements festgelegt.
Ein Nullverweis (Nothing in Visual Basic) mit festgelegtem Datenmember (DataMember) Wird nicht unterstützt und führt zu ArgumentException.
Listenfremder Typ oder Objekt vom Typ „T“ Ein leeres IBindingList-Element vom Typ „T“.
Arrayinstanz Ein IBindingList-Element, das die Arrayelemente enthält.
IEnumerable-Instanz Ein IBindingList-Element, das die IEnumerable-Elemente enthält.
Listeninstanz mit dem Typ „T“ Eine IBindingList-Instanz, die den Typ „T“ enthält.

Darüber hinaus kann die Bindungsquelle (DataSource) auf andere Listentypen wie IListSource und ITypedList festgelegt werden. Diese werden von der Bindungsquelle (BindingSource) entsprechend behandelt. In diesem Fall muss der in der Liste enthaltene Typ einen parameterlosen Konstruktor besitzen.

BindingSource als IBindingList

Die BindingSource-Komponente stellt Member für den Zugriff auf die und die Bearbeitung 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 Eigenschaften vom Typ DataSource oder DataMember 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 zulassen. (Die AllowNew -Eigenschaft ist also auf true festgelegt.)

Benutzerdefinierte Elementerstellung

Sie können das AddingNew-Ereignis behandeln, um Ihre eigene Logik für die Elementerstellung bereitzustellen. Das AddingNew-Ereignis tritt auf, bevor der Bindungsquelle (BindingSource) ein neues Objekt hinzugefügt wird. Dieses Ereignis wird ausgelöst, nachdem die AddNew-Methode aufgerufen wurde, aber bevor das neue Element der zugrunde liegenden Liste hinzugefügt wird. Durch Behandlung dieses Ereignisses können Sie ein benutzerdefiniertes Elementerstellungsverhalten ohne Ableitung von der BindingSource-Klasse bereitstellen. Weitere Informationen finden Sie unter Vorgehensweise: Anpassen der Hinzufügung von Elementen mithilfe der BindingSource in Windows Forms.

Transaktionale Elementerstellung

Die BindingSource-Komponente implementiert die ICancelAddNew-Schnittstelle, die eine transaktionale Elementerstellung ermöglicht. Nach der vorläufigen Erstellung eines neuen Elements mithilfe eines Aufrufs von AddNew kann die Hinzufügung wie folgt committet oder zurückgesetzt werden:

  • Mit der EndNew-Methode wird die ausstehende Hinzufügung explizit committet.

  • Durch Ausführen eines anderen Sammlungsvorgangs (beispielsweise Einfügen, Entfernen oder Verschieben) wird die ausstehende Hinzufügung implizit committet.

  • Mit der CancelNew-Methode wird ein Rollback für die ausstehende Hinzufügung ausgeführt, wenn die Methode noch nicht committet wurde.

IEnumerable-Unterstützung

Die BindingSource-Komponente ermöglicht das Binden von Steuerelementen an IEnumerable-Datenquellen. Diese Komponente ermöglicht die Bindung an eine Datenquelle wie System.Data.SqlClient.SqlDataReader.

Wenn der BindingSource-Komponente eine IEnumerable-Datenquelle zugewiesen wird, erstellt die Bindungsquelle (BindingSource) ein IBindingList-Element und fügt der Liste den Inhalt der IEnumerable-Datenquelle hinzu.

Entwurfszeitunterstützung

Manche Objekttypen können nicht zur Entwurfszeit erstellt werden. Das gilt beispielsweise für Objekte, die auf der Grundlage einer Factoryklasse erstellt werden, oder für Objekte, die von einem Webdienst zurückgegeben werden. Manchmal müssen Ihre Steuerelemente möglicherweise zur Entwurfszeit an diese Typen gebunden werden, obwohl im Arbeitsspeicher kein Objekt vorhanden ist, an das Ihre Steuerelemente gebunden werden können. Es kann beispielsweise vorkommen, dass Sie die Spaltenheader eines DataGridView-Steuerelements mit den Namen der öffentlichen Eigenschaften Ihres benutzerdefinierten Typs beschriften müssen.

Für dieses Szenario unterstützt die BindingSource-Komponente die Bindung an einen Typ (Type). Wenn Sie der DataSource-Eigenschaft einen Typ (Type) zuweisen, erstellt die BindingSource-Komponente eine leere Liste vom Typ BindingList<T> mit Type-Elementen. Alle Steuerelemente, die Sie anschließend an die BindingSource-Komponente binden, werden zur Entwurfszeit (oder zur Laufzeit) auf die Präsenz der Eigenschaften oder des Schemas Ihres Typs aufmerksam gemacht. Weitere Informationen finden Sie unter Vorgehensweise: Binden eines Windows Forms-Steuerelements an einen Typ.

Statische ListBindingHelper-Methoden

Die Typen System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager und BindingSource verwenden eine gemeinsame Logik, um eine Liste auf der Grundlage eines DataSource/DataMember-Paars zu generieren. Darüber hinaus wird diese gemeinsame Logik in den folgenden static-Methoden öffentlich für die Verwendung durch Steuerelementersteller*innen und andere Dritte verfügbar gemacht:

Sortieren und Filtern mit der IBindingListView-Schnittstelle

Die BindingSource-Komponente implementiert die IBindingListView-Schnittstelle, die die IBindingList-Schnittstelle erweitert. IBindingList bietet eine einspaltige Sortierung. IBindingListView bietet erweiterte Sortier- und Filterfunktionen. Mit IBindingListView können Sie Elemente in der Datenquelle sortieren und filtern, wenn die Datenquelle ebenfalls eine dieser Schnittstellen implementiert. Die BindingSource-Komponente bietet keine Referenzimplementierung dieser Member. Stattdessen werden Aufrufe an die zugrunde liegende Liste weitergeleitet.

In der folgenden Tabelle werden die Eigenschaften zum Sortieren und Filtern beschrieben:

Member Beschreibung
Filter-Eigenschaft Wenn die Datenquelle eine IBindingListView ist, wird der Ausdruck abgerufen, der zum Filtern der anzuzeigenden Zeilen verwendet wird, oder dieser Ausdruck wird festgelegt.
Sort-Eigenschaft Wenn die Datenquelle eine IBindingList ist, wird ein Spaltenname abgerufen oder festgelegt, der für das Sortieren und für Informationen zur Sortierreihenfolge verwendet wird.

Oder

Wenn die Datenquelle ein IBindingListView-Element ist und die erweiterte Sortierung unterstützt, werden mehrere Spaltennamen abgerufen, die für die Sortierung und die Sortierreihenfolge verwendet werden.

BindingNavigator-Integration

Sie können die BindingSource-Komponente verwenden, um ein beliebiges Windows Forms-Steuerelement an eine Datenquelle zu binden. Das BindingNavigator-Steuerelement ist jedoch speziell für die Verwendung mit der BindingSource-Komponente konzipiert. Das BindingNavigator-Steuerelement bietet eine Benutzeroberfläche zum Steuern des aktuellen Elements der BindingSource-Komponente. Standardmäßig stellt das BindingNavigator-Steuerelement Schaltflächen bereit, die den Navigationsmethoden für die BindingSource-Komponente entsprechen. Weitere Informationen finden Sie unter Vorgehensweise: Datennavigation mithilfe des BindingNavigator-Steuerelements in Windows Forms.

Siehe auch