Rozhraní týkající se datových vazeb
S ADO.NET můžete vytvořit mnoho různých datových struktur, které vyhovují potřebám vaší aplikace a datům, se kterými pracujete. Můžete chtít vytvořit vlastní třídy, které poskytují nebo využívají data ve Windows Forms. Tyto objekty můžou nabízet různé úrovně funkčnosti a složitosti od základních datových vazeb až po poskytování podpory doby návrhu, kontroly chyb, oznámení o změnách nebo dokonce podpory strukturovaného vrácení změn provedených v samotných datech.
Spotřebitelé rozhraní Data-Binding
Následující části popisují dvě skupiny objektů rozhraní. První skupina uvádí rozhraní implementovaná ve zdrojích dat autory zdrojů dat. Tato rozhraní jsou navržená tak, aby je spotřebitelé zdrojů dat spotřebovávají, což jsou ve většině případů ovládací prvky nebo komponenty modelu Windows Forms. Druhá skupina uvádí rozhraní určená pro autory komponent. Autoři komponent používají tato rozhraní při vytváření komponenty, která podporuje datovou vazbu, kterou bude využívat modul datových vazeb Modelu Windows Forms. Tato rozhraní můžete implementovat v rámci tříd přidružených k vašemu formuláři, abyste povolili datovou vazbu; každý případ představuje třídu, která implementuje rozhraní, které umožňuje interakci s daty. Nástroje pro rychlý vývoj dat (RAD) sady Visual Studio již tuto funkci využívají.
Rozhraní pro implementaci autory zdrojů dat
Následující rozhraní jsou navržená tak, aby byla využita ovládacími prvky Windows Forms:
rozhraní IList
Třída, která implementuje rozhraní IList může být Array, ArrayListnebo CollectionBase. Jedná se o indexované seznamy položek typu Object. Tyto seznamy musí obsahovat homogenní typy, protože první položka indexu určuje typ. IList by byla k dispozici pro vazbu pouze během provozu.
Poznámka
Pokud chcete vytvořit seznam obchodních objektů pro vazbu s Windows Forms, měli byste zvážit použití BindingList<T>. BindingList<T> je rozšiřitelná třída, která implementuje primární rozhraní požadovaná pro obousměrnou datovou vazbu Modelu Windows Forms.
rozhraní IBindingList
Třída, která implementuje rozhraní IBindingList poskytuje mnohem vyšší úroveň funkcí datové vazby. Tato implementace nabízí základní možnosti řazení a oznámení o změnách, a to jak při změně položek seznamu (například třetí položka v seznamu zákazníků se změní na pole Adresa), tak i při změně samotného seznamu (například počet položek v seznamu se zvýší nebo sníží). Oznámení o změnách je důležité, pokud plánujete mít více ovládacích prvků svázaných se stejnými daty a chcete, aby se změny dat provedené v jednom z ovládacích prvků rozšířily do ostatních vázaných ovládacích prvků.
Poznámka
Oznámení o změně je povoleno pro rozhraní IBindingList prostřednictvím vlastnosti SupportsChangeNotification, která při
true
vyvolá ListChanged událost, jež označuje změnu seznamu nebo změnu položky v seznamu.Typ změny popisuje vlastnost ListChangedType parametru ListChangedEventArgs. Proto se při každé aktualizaci datového modelu aktualizují také všechna závislá zobrazení, jako jsou jiné ovládací prvky vázané na stejný zdroj dat. Pokud se objekty obsažené v seznamu změní, budou muset seznam upozornit, aby seznam mohl vyvolat ListChanged událost.
Poznámka
BindingList<T> poskytuje obecnou implementaci IBindingList rozhraní.
rozhraní IBindingListView
Třída, která implementuje IBindingListView rozhraní poskytuje všechny funkce implementace IBindingList, stejně jako filtrování a pokročilé funkce řazení. Tato implementace nabízí filtrování založené na řetězcích a vícesloupcové řazení pomocí dvojic popisovačů vlastností.
rozhraní IEditableObject
Třída, která implementuje rozhraní IEditableObject, umožňuje objektu řídit, kdy mají být změny v daném objektu provedeny jako trvalé. Tato implementace vám umožňuje BeginEdit, EndEdita CancelEdit metody, které umožňují vrátit zpět změny provedené v objektu. Následuje stručné vysvětlení fungování BeginEdit, EndEdita CancelEdit metod a jejich spolupráce ve spojení s ostatními, aby bylo možné vrátit změny provedené v datech:
Metoda BeginEdit signalizuje začátek úpravy objektu. Objekt, který implementuje toto rozhraní, bude muset uložit všechny aktualizace po volání metody BeginEdit způsobem, aby aktualizace lze zahodit, pokud je volána metoda CancelEdit. V datové vazbě Windows Forms můžete volat BeginEdit vícekrát v rámci jedné transakce úprav (například BeginEdit, BeginEdit, EndEdit). Implementace IEditableObject by měly kontrolovat, zda již byl BeginEdit volán, a ignorovat následná volání BeginEdit. Vzhledem k tomu, že tuto metodu lze volat vícekrát, je důležité, aby následná volání jsou nedestruktivní; to znamená, že následná volání BeginEdit nemohou zničit aktualizace, které byly provedeny, nebo změnit data uložená při prvním volání BeginEdit.
Metoda EndEdit přenáší všechny změny do podkladového objektu, které nastaly od té doby, co bylo voláno BeginEdit, pokud je objekt v současné době v režimu úprav.
Metoda CancelEdit zahodí všechny změny provedené v objektu.
Další informace o tom, jak fungují metody BeginEdit, EndEdita CancelEdit, najdete v tématu Uložení dat zpět do databáze.
Tento transakční pojem funkce dat používá ovládací prvek DataGridView.
rozhraní ICancelAddNew
Třída, která implementuje rozhraní ICancelAddNew obvykle implementuje IBindingList rozhraní a umožňuje vrátit zpět přidání do zdroje dat pomocí AddNew metody. Pokud váš zdroj dat implementuje rozhraní IBindingList, měli byste ho také realizovat ve formě rozhraní ICancelAddNew.
rozhraní IDataErrorInfo
Třída, která implementuje rozhraní IDataErrorInfo umožňuje objektům nabízet vlastní informace o chybách pro vázané ovládací prvky:
rozhraní IEnumerable
Třída, která implementuje rozhraní IEnumerable, je obvykle používána v ASP.NET. Podpora modelu Windows Forms pro toto rozhraní je dostupná pouze prostřednictvím komponenty BindingSource.
Poznámka
Komponenta BindingSource zkopíruje všechny položky IEnumerable do samostatného seznamu pro účely vazby.
rozhraní ITypedList
Třída kolekcí, která implementuje ITypedList rozhraní poskytuje možnost řídit pořadí a sadu vlastností vystavených vázanému ovládacímu prvku.
Poznámka
Když implementujete metodu GetItemProperties a pole PropertyDescriptor není null, poslední položka v poli bude popisovač vlastnosti, který popisuje seznam, jenž je dalším seznamem položek.
rozhraní ICustomTypeDescriptor
Třída, která implementuje rozhraní ICustomTypeDescriptor poskytuje dynamické informace o sobě. Toto rozhraní se podobá ITypedList, ale používá se spíše pro objekty než seznamy. Toto rozhraní používá DataRowView k promítání schématu podkladových řádků. Jednoduchá implementace ICustomTypeDescriptor je poskytována třídou CustomTypeDescriptor.
Poznámka
Chcete-li podporovat vazbu v době návrhu na typy, které implementují ICustomTypeDescriptor, musí typ také implementovat IComponent a existovat jako instance ve formuláři.
rozhraní IListSource
Třída, která implementuje rozhraní IListSource, umožňuje vazbu na bázi seznamu u objektů, které nejsou seznamem. Metoda GetList systému IListSource se používá k vrácení seznamu s možností vazby z objektu, který nedědí z IList. Třída DataSet používá IListSource.
rozhraní IRaiseItemChangedEvents
Třída, která implementuje rozhraní IRaiseItemChangedEvents, je seznam, který lze svázat, a také implementuje rozhraní IBindingList. Toto rozhraní slouží k označení, zda váš typ generuje události ListChanged typu ItemChanged prostřednictvím své vlastnosti RaisesItemChangedEvents.
Poznámka
Měli byste implementovat IRaiseItemChangedEvents, pokud zdroj dat poskytuje vlastnost pro výpis převodu událostí, které byly uvedeny výše, a je v interakci s komponentou BindingSource. Jinak BindingSource také provede vlastnost pro výpis převodu událostí, což vede k pomalejšímu výkonu.
rozhraní ISupportInitialize
Komponenta, která implementuje rozhraní ISupportInitialize, využívá výhod dávkových optimalizací pro nastavení vlastností a inicializaci spolu závislých vlastností. ISupportInitialize obsahuje dvě metody:
rozhraní ISupportInitializeNotification
Komponenta, která implementuje rozhraní ISupportInitializeNotification, také implementuje rozhraní ISupportInitialize. Toto rozhraní umožňuje oznámit ostatním komponentám ISupportInitialize, že je inicializace dokončena. Rozhraní ISupportInitializeNotification obsahuje dva členy:
IsInitialized vrátí hodnotu
boolean
označující, zda je komponenta inicializována.K Initialized dojde, když je zavolán EndInit.
rozhraní INotifyPropertyChanged
Třída, která implementuje toto rozhraní je typ, který vyvolá událost, když se změní některé z jeho hodnot vlastností. Toto rozhraní je navržené tak, aby nahradilo vzor změny události pro každou vlastnost ovládacího prvku. Při použití v BindingList<T>by obchodní objekt měl implementovat INotifyPropertyChanged rozhraní a BindingList'1 převede PropertyChanged události na ListChanged události typu ItemChanged.
Poznámka
Aby se oznámení o změnách vyskytlo ve vazbě mezi vázaným klientem a zdrojem dat, měl by váš typ vázaného zdroje dat buď implementovat rozhraní INotifyPropertyChanged (upřednostňované), nebo můžete zadat propertyName
Changed
události pro vázaný typ, ale neměli byste dělat obojí.
Rozhraní pro implementaci autory komponent
Následující rozhraní jsou navržena pro použití modulem Windows Forms pro datové vazby:
rozhraní IBindableComponent
Třída, která implementuje toto rozhraní, je neovládací komponenta, která podporuje datové vazby. Tato třída vrací datové vazby a kontext vazby komponenty prostřednictvím DataBindings a BindingContext vlastností tohoto rozhraní.
Poznámka
Pokud vaše komponenta dědí z Control, nemusíte implementovat rozhraní IBindableComponent.
rozhraní ICurrencyManagerProvider
Třída, která implementuje rozhraní ICurrencyManagerProvider je komponenta, která poskytuje vlastní CurrencyManager pro správu vazeb přidružených k této konkrétní komponentě. Přístup k vlastnímu CurrencyManager je poskytován vlastností CurrencyManager.
Poznámka
Třída, která dědí z Control spravuje vazby automaticky prostřednictvím své vlastnosti BindingContext, takže případy, ve kterých potřebujete implementovat ICurrencyManagerProvider, jsou poměrně vzácné.
Viz také
.NET Desktop feedback