Schnittstellen im Zusammenhang mit der Datenbindung
Mit ADO.NET können Sie viele verschiedene Datenstrukturen erstellen, die den Bindungsanforderungen Ihrer Anwendung und den Daten entsprechen, mit denen Sie arbeiten. Möglicherweise möchten Sie eigene Klassen erstellen, die Daten in Windows Forms bereitstellen oder nutzen. Diese Objekte können unterschiedliche Funktionalitäts- und Komplexitätsebenen bieten, von der grundlegenden Datenbindung bis hin zur Bereitstellung von Entwurfszeitunterstützung, Fehlerüberprüfung, Änderungsbenachrichtigung oder sogar Unterstützung für ein strukturiertes Rollback der an den Daten vorgenommenen Änderungen selbst.
Verbraucher von Data-Binding Schnittstellen
In den folgenden Abschnitten werden zwei Gruppen von Schnittstellenobjekten beschrieben. Die erste Gruppe listet Schnittstellen auf, die von Datenquellenautoren auf Datenquellen implementiert werden. Diese Schnittstellen sind für die Nutzung durch Datenquellen-Abnehmer konzipiert, die in den meisten Fällen aus Windows Forms-Steuerelementen oder -Komponenten bestehen. Die zweite Gruppe listet Schnittstellen auf, die von Komponentenautoren verwendet werden können. Komponentenautoren verwenden diese Schnittstellen, wenn sie eine Komponente erstellen, die die Datenbindung unterstützt und vom Windows Forms-Datenbindungssystem genutzt wird. Sie können diese Schnittstellen in Klassen implementieren, die Ihrem Formular zugeordnet sind, um die Datenbindung zu aktivieren. jeder Fall stellt eine Klasse dar, die eine Schnittstelle implementiert, die die Interaktion mit Daten ermöglicht. Visual Studio-Tools für die schnelle Anwendungsentwicklung (RAD) zur Datendesign-Erfahrung nutzen diese Funktionalität bereits.
Schnittstellen für die Implementierung durch Datenquellenautoren
Die folgenden Schnittstellen sind so konzipiert, dass sie von Windows Forms-Steuerelementen genutzt werden:
IList-Schnittstelle
Eine Klasse, die die IList Schnittstelle implementiert, kann ein Array, ArrayListoder CollectionBasesein. Hierbei handelt es sich um indizierte Listen von Elementen vom Typ Object. Diese Listen müssen homogene Typen enthalten, da das erste Element des Indexes den Typ bestimmt. IList wäre nur zur Laufzeit für die Bindung verfügbar.
Anmerkung
Wenn Sie eine Liste von Geschäftsobjekten für die Bindung mit Windows Forms erstellen möchten, sollten Sie die Verwendung von BindingList<T>in Betracht ziehen. Die BindingList<T> ist eine erweiterbare Klasse, die die primären Schnittstellen implementiert, die für die bidirektionale Windows Forms-Datenbindung erforderlich sind.
IBindingList-Schnittstelle
Eine Klasse, die die IBindingList Schnittstelle implementiert, bietet eine wesentlich höhere Datenbindungsfunktionalität. Diese Implementierung bietet Ihnen grundlegende Sortierfunktionen und Änderungsbenachrichtigungen, sowohl wenn sich die Listenelemente ändern (z. B. wenn das dritte Element in einer Kundenliste eine Änderung im Adressfeld aufweist), als auch wenn sich die Liste selbst ändert (z. B. wenn sich die Anzahl der Elemente in der Liste erhöht oder verringert). Die Änderungsbenachrichtigung ist wichtig, wenn Sie beabsichtigen, mehrere Steuerelemente an dieselben Daten gebunden zu haben, und Sie möchten, dass Datenänderungen in einem der Steuerelemente an die anderen gebundenen Steuerelemente weitergegeben werden.
Anmerkung
Die Änderungsbenachrichtigung wird für die IBindingList Schnittstelle über die eigenschaft SupportsChangeNotification aktiviert, die, wenn
true
, ein ListChanged Ereignis auslöst, das angibt, dass die Liste geändert wurde oder ein Element in der Liste geändert wurde.Der Änderungstyp wird durch die ListChangedType-Eigenschaft des ListChangedEventArgs Parameters beschrieben. Jedes Mal, wenn das Datenmodell aktualisiert wird, werden alle abhängigen Ansichten, z. B. andere Steuerelemente, die an dieselbe Datenquelle gebunden sind, ebenfalls aktualisiert. Objekte, die in der Liste enthalten sind, müssen die Liste jedoch benachrichtigen, wenn sie sich ändern, damit die Liste das ListChanged Ereignis auslösen kann.
Anmerkung
Die BindingList<T> bietet eine generische Implementierung der IBindingList Schnittstelle.
IBindingListView-Schnittstelle
Eine Klasse, die die IBindingListView Schnittstelle implementiert, bietet alle Funktionen einer Implementierung von IBindingListsowie Filter- und erweiterte Sortierfunktionen. Diese Implementierung bietet eine zeichenfolgenbasierte Filterung und eine mehrspaltige Sortierung mithilfe von Richtungspaaren mit Eigenschaftsdeskriptoren.
IEditableObject-Schnittstelle
Eine Klasse, die die IEditableObject Schnittstelle implementiert, ermöglicht es einem Objekt zu steuern, wann Änderungen an diesem Objekt dauerhaft vorgenommen werden. Diese Implementierung bietet Ihnen die methoden BeginEdit, EndEditund CancelEdit, mit denen Sie änderungen, die an dem Objekt vorgenommen wurden, zurücksetzen können. Nachfolgend finden Sie eine kurze Erläuterung der Funktionsweise der Methoden BeginEdit, EndEditund CancelEdit und wie sie zusammenarbeiten, um ein mögliches Zurücksetzen von Änderungen zu ermöglichen, die an den Daten vorgenommen wurden:
Die BeginEdit Methode signalisiert den Beginn einer Bearbeitung für ein Objekt. Ein Objekt, das diese Schnittstelle implementiert, muss nach dem Aufruf der BeginEdit Methode alle Aktualisierungen so speichern, dass die Updates verworfen werden können, wenn die CancelEdit-Methode aufgerufen wird. In der Datenbindung von Windows Forms können Sie BeginEdit mehrmals im Rahmen eines einzelnen Änderungsvorgangs aufrufen (z. B. BeginEdit, BeginEdit, EndEdit). Implementierungen von IEditableObject sollten verfolgen, ob BeginEdit bereits aufgerufen wurde und nachfolgende Aufrufe von BeginEditignorieren. Da diese Methode mehrmals aufgerufen werden kann, ist es wichtig, dass nachfolgende Aufrufe daran nicht destruktiv sind; d. h. nachfolgende BeginEdit Aufrufe können die vorgenommenen Aktualisierungen nicht zerstören oder die Daten ändern, die im ersten BeginEdit Anruf gespeichert wurden.
Die EndEdit-Methode überträgt alle Änderungen, seit BeginEdit aufgerufen wurde, in das zugrunde liegende Objekt, wenn sich das Objekt momentan im Bearbeitungsmodus befindet.
Die CancelEdit-Methode verwirft alle Am Objekt vorgenommenen Änderungen.
Weitere Informationen dazu, wie die Methoden BeginEdit, EndEditund CancelEdit funktionieren, finden Sie unter Speichern von Daten in der Datenbank.
Dieser transaktionale Begriff der Datenfunktionalität wird vom Steuerungselement DataGridView verwendet.
ICancelAddNew-Schnittstelle
Eine Klasse, die die ICancelAddNew-Schnittstelle implementiert, implementiert in der Regel auch die IBindingList-Schnittstelle und ermöglicht es, eine Ergänzung der Datenquelle mit der AddNew-Methode rückgängig zu machen. Wenn Ihre Datenquelle die Schnittstelle IBindingList implementiert, sollten Sie auch sicherstellen, dass sie die Schnittstelle ICancelAddNew implementiert.
IDataErrorInfo-Schnittstelle
Eine Klasse, die die IDataErrorInfo-Schnittstelle implementiert, ermöglicht Objekten das Bereitstellen von benutzerdefinierten Fehlerinformationen an gebundene Steuerelemente:
IEnumerable-Schnittstelle
Eine Klasse, die die IEnumerable Schnittstelle implementiert, wird in der Regel von ASP.NET verwendet. Die Windows Forms-Unterstützung für diese Schnittstelle ist nur über die komponente BindingSource verfügbar.
Anmerkung
Die BindingSource Komponente kopiert alle IEnumerable Elemente zu Bindungszwecken in eine separate Liste.
ITypedList-Schnittstelle
Eine Auflistungsklasse, die die ITypedList Schnittstelle implementiert, bietet die Möglichkeit, die Reihenfolge und den Satz von Eigenschaften zu steuern, die für das gebundene Steuerelement verfügbar gemacht werden.
Anmerkung
Wenn Sie die GetItemProperties-Methode implementieren und das PropertyDescriptor-Array nicht null ist, dann ist der letzte Eintrag im Array der Eigenschaftsbeschreiber, der die Listeneigenschaft beschreibt, die eine weitere Liste von Elementen ist.
ICustomTypeDescriptor-Schnittstelle
Eine Klasse, die die ICustomTypeDescriptor Schnittstelle implementiert, stellt dynamische Informationen über sich selbst bereit. Diese Schnittstelle ist mit ITypedList vergleichbar, wird jedoch für Objekte anstelle von Listen verwendet. Diese Schnittstelle wird von DataRowView verwendet, um das Schema der zugrunde liegenden Zeilen zu projizieren. Eine einfache Implementierung von ICustomTypeDescriptor wird von der CustomTypeDescriptor Klasse bereitgestellt.
Anmerkung
Zur Unterstützung der Entwurfszeitbindung an Typen, die ICustomTypeDescriptorimplementieren, muss der Typ auch IComponent implementieren und als Instanz im Formular vorhanden sein.
IListSource Schnittstelle
Eine Klasse, die die IListSource Schnittstelle implementiert, ermöglicht die listenbasierte Bindung für Nicht-Listenobjekte. Die GetList-Methode von IListSource wird verwendet, um eine bindungsfähige Liste aus einem Objekt zurückzugeben, das nicht von IListerbt. IListSource wird von der DataSet Klasse verwendet.
IRaiseItemChangedEvents-Schnittstelle
Eine Klasse, die die IRaiseItemChangedEvents Schnittstelle implementiert, ist eine bindungsfähige Liste, die auch die IBindingList Schnittstelle implementiert. Diese Schnittstelle wird verwendet, um anzugeben, ob Ihr Typ ListChanged Ereignisse vom Typ ItemChanged über Ihre RaisesItemChangedEvents-Eigenschaft auslöst.
Anmerkung
Sie sollten die IRaiseItemChangedEvents implementieren, wenn Ihre Datenquelle die Eigenschaft zum Auflisten der zuvor beschriebenen Ereignisumwandlung bereitstellt und mit der BindingSource-Komponente interagiert. Andernfalls führt die BindingSource auch eigenschaften zur Listenereigniskonvertierung durch, was zu einer langsameren Leistung führt.
ISupportInitialize-Schnittstelle
Eine Komponente, die die ISupportInitialize-Schnittstelle implementiert, nutzt die Vorteile von Batchoptimierungen zum Festlegen von Eigenschaften und zum Initialisieren koabhängiger Eigenschaften. Die ISupportInitialize enthält zwei Methoden:
ISupportInitializeNotification-Schnittstelle
Eine Komponente, die die ISupportInitializeNotification Schnittstelle implementiert, implementiert auch die ISupportInitialize Schnittstelle. Mit dieser Schnittstelle können Sie andere ISupportInitialize Komponenten benachrichtigen, dass die Initialisierung abgeschlossen ist. Die ISupportInitializeNotification-Schnittstelle enthält zwei Elemente:
IsInitialized gibt einen
boolean
Wert zurück, der angibt, ob die Komponente initialisiert wird.Initialized tritt auf, wenn EndInit aufgerufen wird.
INotifyPropertyChanged-Schnittstelle
Eine Klasse, die diese Schnittstelle implementiert, ist ein Typ, der ein Ereignis auslöst, wenn sich eine seiner Eigenschaftswerte ändert. Diese Schnittstelle ist so konzipiert, dass das Muster ersetzt wird, für jede Eigenschaft eines Steuerelements ein Änderungsereignis zu haben. Bei der Verwendung in einem BindingList<T>sollte ein Geschäftsobjekt die INotifyPropertyChanged-Schnittstelle implementieren, und die BindingList`1 konvertiert PropertyChanged-Ereignisse in ListChanged-Ereignisse des Typs ItemChanged.
Anmerkung
Damit die Änderungsbenachrichtigung in einer Bindung zwischen einem gebundenen Client und einer Datenquelle erfolgt, sollte der gebundene Datenquellentyp entweder die INotifyPropertyChanged Schnittstelle (bevorzugt) implementieren, oder Sie können propertyName-
Changed
Ereignisse für den gebundenen Typ bereitstellen, aber nicht beides tun.
Schnittstellen für die Implementierung durch Komponentenautoren
Die folgenden Schnittstellen sind für die Nutzung durch den Windows Forms-Datenbindungsmotor ausgelegt.
IBindableComponent-Schnittstelle
Eine Klasse, die diese Schnittstelle implementiert, ist eine Nicht-Steuerelementkomponente, die die Datenbindung unterstützt. Diese Klasse gibt die Datenbindungen und den Bindungskontext der Komponente über die eigenschaften DataBindings und BindingContext dieser Schnittstelle zurück.
Anmerkung
Wenn Ihre Komponente von Controlerbt, müssen Sie die IBindableComponent Schnittstelle nicht implementieren.
ICurrencyManagerProvider-Schnittstelle
Eine Klasse, die die ICurrencyManagerProvider Schnittstelle implementiert, ist eine Komponente, die eigene CurrencyManager zum Verwalten der Bindungen bereitstellt, die dieser bestimmten Komponente zugeordnet sind. Der Zugriff auf die benutzerdefinierte CurrencyManager wird von der CurrencyManager-Eigenschaft bereitgestellt.
Anmerkung
Eine Klasse, die von Control erbt, verwaltet Bindungen automatisch über die BindingContext-Eigenschaft, sodass Fälle, in denen Sie die ICurrencyManagerProvider implementieren müssen, ziemlich selten sind.
Siehe auch
.NET Desktop feedback