Freigeben über


BindingSource-Komponentenarchitektur

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 bietet die folgenden Vorteile gegenüber herkömmlicher Datenbindung:

  • Ermöglicht die Entwurfszeitbindung an Geschäftsobjekte.

  • Kapselt CurrencyManager-Funktionalität und macht CurrencyManager-Ereignisse zur Entwurfszeit verfügbar.

  • Vereinfacht das Erstellen einer Liste, die die IBindingList Schnittstelle unterstützt, indem Eine Listenänderungsbenachrichtigung für Datenquellen bereitgestellt wird, die keine Benachrichtigung zur Listenänderung unterstützen.

  • Stellt einen Erweiterbarkeitspunkt für die IBindingList.AddNew Methode bereit.

  • Stellt eine Dereferenzierungsebene zwischen der Datenquelle und dem Steuerelement bereit. Diese Indirektion ist wichtig, wenn sich die Datenquelle zur Laufzeit ändern kann.

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

Aus diesen Gründen ist die BindingSource Komponente die bevorzugte Methode zum Binden Ihrer Windows Forms-Steuerelemente an Datenquellen.

Binding-Source-Funktionen

Die BindingSource Komponente bietet mehrere Features zum Binden von Steuerelementen an Daten. Mit diesen Features können Sie die meisten Datenbindungsszenarien ohne Codierung implementieren.

Die BindingSource Komponente erfüllt dies durch die Bereitstellung einer konsistenten Schnittstelle für den Zugriff auf viele verschiedene Arten von Datenquellen. Dies bedeutet, dass Sie dasselbe Verfahren zum Binden an einen beliebigen Typ verwenden. Beispielsweise können Sie die DataSource Eigenschaft an ein DataSet oder ein Geschäftsobjekt anfügen, und in beiden Fällen verwenden Sie denselben Satz von Eigenschaften, Methoden und Ereignissen, um die Datenquelle zu bearbeiten.

Die von der BindingSource Komponente bereitgestellte einheitliche Schnittstelle vereinfacht den Prozess der Bindung von Daten an Steuerelemente erheblich. Bei Datenquellentypen, die Änderungsbenachrichtigungen bereitstellen, kommuniziert die BindingSource Komponente automatisch Änderungen zwischen dem Steuerelement und der Datenquelle. Für Datenquellentypen, die keine Änderungsbenachrichtigung bereitstellen, werden Ereignisse bereitgestellt, mit denen Sie Änderungsbenachrichtigungen auslösen können. In der folgenden Liste sind die features aufgeführt, die von der BindingSource Komponente unterstützt werden:

Dereferenzierung

Die BindingSource Komponente stellt eine Abstraktionsebene zwischen einer Steuerung und einer Datenquelle bereit. Anstatt ein Steuerelement direkt an eine Datenquelle zu binden, binden Sie das Steuerelement an eine BindingSource, und sie fügen die Datenquelle an die Eigenschaft der BindingSource Komponente DataSource an.

Mit dieser Indirektionsstufe können Sie die Datenquelle ändern, ohne die Steuerelementbindung zurückzusetzen. Dadurch erhalten Sie die folgenden Funktionen:

Währungsverwaltung

Die BindingSource-Komponente implementiert die ICurrencyManagerProvider-Schnittstelle zur Verwaltung von Währungen für Sie. Mit der ICurrencyManagerProvider Schnittstelle können Sie auch auf den Währungsmanager für einen BindingSource, zusätzlich zum Währungsmanager für eine andere BindingSource , die an dasselbe DataMembergebunden ist, zugreifen.

Die BindingSource Komponente kapselt CurrencyManager die Funktionalität und macht die gängigsten CurrencyManager Eigenschaften und Ereignisse verfügbar. In der folgenden Tabelle werden einige der Elemente im Zusammenhang mit der Währungsverwaltung beschrieben.

CurrencyManager-Eigenschaft ruft den zugeordneten Währungsmanager des BindingSource ab.

GetRelatedCurrencyManager-Methode Wenn ein weiteres BindingSource an das angegebene Datenelement gebunden ist, wird dessen Currency Manager abgerufen.

Current-Eigenschaft Ruft das aktuelle Element der Datenquelle ab.

Position Eigenschaft legt fest oder ermittelt die aktuelle Position in der zugrunde liegenden Liste.

EndEdit die Methode wendet ausstehende Änderungen an der zugrunde liegenden Datenquelle an.

CancelEdit -Methode bricht den aktuellen Bearbeitungsvorgang ab.

Datenquelle als Liste

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

Wenn die BindingSource Komponente an eine Datenquelle angefügt ist, wird die Datenquelle als Liste verfügbar gemacht.

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 allgemeinen Datenquellen und die resultierende Listenauswertung aufgeführt.

DataSource-Eigenschaft Ergebnisse auflisten
Nullverweis (Nothing in Visual Basic) Eine Leere IBindingList von Objekten. Durch Hinzufügen eines Elements wird die Liste auf den Typ des hinzugefügten Elements festgelegt.
Nullverweis (Nothing in Visual Basic) mit DataMember festgelegt Nicht unterstützt; ergibt ArgumentException.
Nicht-Listentyp oder Objekt vom Typ "T" Ein leerer IBindingList eines Typs "T".
Arrayinstanz Ein IBindingList Element, das die Arrayelemente enthält.
IEnumerable Beispiel Ein IBindingList, das die IEnumerable-Elemente enthält
Listenobjekt mit Typ "T" Eine IBindingList Instanz, die den Typ "T" enthält.

Darüber hinaus kann DataSource auf andere Listentypen festgelegt werden, wie IListSource und ITypedList, und die BindingSource wird sie entsprechend behandeln. In diesem Fall sollte der in der Liste enthaltene Typ einen parameterlosen Konstruktor aufweisen.

BindingSource als IBindingList

Die BindingSource Komponente stellt Member für den Zugriff und die Bearbeitung der zugrunde liegenden Daten als IBindingList. In der folgenden Tabelle werden einige dieser Member beschrieben.

Mitglied BESCHREIBUNG
List-Eigenschaft Ruft die Liste ab, die aus der Auswertung der DataSource Oder DataMember Eigenschaften resultiert.
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 (d. a. die AllowNew Eigenschaft ist auf truefestgelegt).

Erstellung benutzerdefinierter Elemente

Sie können das AddingNew Ereignis behandeln, um Ihre eigene Elementerstellungslogik bereitzustellen. Das AddingNew Ereignis tritt auf, bevor ein neues Objekt dem BindingSourceHinzugefü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 die Behandlung dieses Ereignisses können Sie ein benutzerdefiniertes Elementerstellungsverhalten bereitstellen, ohne von der BindingSource Klasse abzuleiten. Weitere Informationen finden Sie unter How to: Customize Item Addition with the Windows Forms BindingSource.

Transaktionselementerstellung

Die BindingSource-Komponente implementiert die ICancelAddNew-Schnittstelle, die die Erstellung transaktionaler Elemente ermöglicht. Nachdem ein neues Element mithilfe eines Aufrufs AddNewvorläufig erstellt wurde, kann das Hinzufügen auf folgende Weise zugesichert oder zurückgesetzt werden:

  • Die EndNew Methode übernimmt explizit den ausstehenden Zusatz.

  • Wenn Sie einen anderen Sammlungsvorgang ausführen, z. B. ein Einfügen, Entfernen oder Verschieben, wird die ausstehende Ergänzung implizit festgeschrieben.

  • Die CancelNew-Methode wird die ausstehende Ergänzung zurücksetzen, wenn die Methode noch nicht bestätigt wurde.

IEnumerable-Unterstützung

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

Wenn der IEnumerable Komponente eine BindingSource Datenquelle zugewiesen wird, erstellt die BindingSource Komponente den IBindingList Inhalt der IEnumerable Datenquelle und fügt sie der Liste hinzu.

Design-Time-Unterstützung

Einige Objekttypen können zur Entwurfszeit nicht erstellt werden, z. B. Objekte, die aus einer Factoryklasse erstellt wurden, oder Objekte, die von einem Webdienst zurückgegeben werden. Möglicherweise müssen Sie Ihre Steuerelemente manchmal zur Entwurfszeit an diese Typen binden, obwohl kein Objekt im Arbeitsspeicher vorhanden ist, an das Ihre Steuerelemente gebunden werden können. Sie können z. B. die Spaltenüberschriften eines DataGridView Steuerelements mit den Namen der öffentlichen Eigenschaften Ihres benutzerdefinierten Typs beschriften.

Zur Unterstützung dieses Szenarios unterstützt die Komponente die BindingSource Bindung an ein Type. Wenn Sie eine Type der DataSource-Eigenschaft zuweisen, erstellt die BindingSource-Komponente eine leere BindingList<T> von Type-Elementen. Alle Steuerelemente, die Sie anschließend an die BindingSource Komponente binden, werden auf das Vorhandensein der Eigenschaften oder des Schemas Ihres Typs zur Entwurfszeit oder zur Laufzeit hingewiesen. Weitere Informationen finden Sie unter So binden Sie ein Windows Forms-Steuerelement an einen Typ.

Static ListBindingHelper-Methoden

Die System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManager und BindingSource Typen teilen alle die gleiche Logik, um eine Liste aus einem DataSource/DataMember Paar zu generieren. Darüber hinaus wird diese allgemeine Logik öffentlich für die Verwendung durch Steuerelementautoren und andere Dritte in den folgenden static Methoden verfügbar gemacht:

Sortieren und Filtern mit der IBindingListView-Schnittstelle

Die BindingSource Komponente implementiert die IBindingListView Schnittstelle, die die IBindingList Schnittstelle erweitert. Das IBindingList bietet einspaltige Sortierung, und das IBindingListView bietet erweiterte Sortierung und Filterung. Mit IBindingListView, können Sie Elemente in der Datenquelle sortieren und filtern, wenn die Datenquelle auch eine dieser Schnittstellen implementiert. Die BindingSource Komponente stellt keine Referenzimplementierung dieser Mitglieder bereit. Stattdessen werden Anrufe an die zugrunde liegende Liste weitergeleitet.

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

Mitglied BESCHREIBUNG
Filter-Eigenschaft Wenn die Datenquelle eine IBindingListView ist, wird der Ausdruck abgerufen oder festgelegt, der zum Filtern der anzuzeigenden Zeilen verwendet wird.
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 eine IBindingListView ist und erweiterte Sortierfunktionen unterstützt, werden mehrere Spaltennamen sowie die Sortierreihenfolge verwendet.

Integration mit BindingNavigator

Sie können die BindingSource Komponente verwenden, um ein beliebiges Windows Forms-Steuerelement an eine Datenquelle zu binden, das Steuerelement ist jedoch BindingNavigator speziell für die Arbeit mit der BindingSource Komponente konzipiert. 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 für die BindingSource Komponente entsprechen. Weitere Informationen finden Sie unter So geht's: Navigieren von Daten mit dem Windows Forms BindingNavigator-Steuerelement.

Siehe auch