Sdílet prostřednictvím


Rozhraní související s datovou vazbou

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 v model 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í datových vazeb

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ů model Windows Forms ovládací prvky nebo komponenty. 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 model Windows Forms datových vazeb. 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 model Windows Forms:

  • IList Rozhraní

    Třída, která implementuje IList rozhraní, může být , ArrayArrayListnebo 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 pouze pro vazbu za běhu.

    Poznámka:

    Pokud chcete vytvořit seznam obchodních objektů pro vazbu s model Windows Forms, měli byste zvážit použití .BindingList<T> Jedná se BindingList<T> o rozšiřitelnou třídu, která implementuje primární rozhraní požadovaná pro obousměrnou model Windows Forms datovou vazbu.

  • IBindingList Rozhraní

    Třída, která implementuje IBindingList rozhraní, 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 IBindingList rozhraní prostřednictvím SupportsChangeNotification vlastnosti, která, když truevyvolá ListChanged událost, označující seznam změněn nebo položku v seznamu změněn.

    Typ změny je popsán 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. Objekty obsažené v seznamu však budou muset upozornit seznam, když se změní, aby seznam mohl vyvolat ListChanged událost.

    Poznámka:

    Poskytuje BindingList<T> obecnou implementaci IBindingList rozhraní.

  • IBindingListView Rozhraní

    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í.

  • IEditableObject Rozhraní

    Třída, která implementuje IEditableObject rozhraní umožňuje objekt řídit, kdy změny v daném objektu jsou provedeny trvalé. Tato implementace vám poskytuje 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 fungování ve spojení s sebou, aby bylo možné vrácení změn provedených v datech:

    • Metoda BeginEdit signalizuje začátek úpravy objektu. Objekt, který implementuje toto rozhraní, bude muset uložit všechny aktualizace po BeginEdit volání metody takovým způsobem, že aktualizace lze zahodit, pokud CancelEdit je volána metoda. V datové vazbě model Windows Forms můžete volat BeginEdit vícekrát v rozsahu jedné editační transakce (například BeginEdit, , BeginEditEndEdit). IEditableObject Implementace by měly sledovat, zda BeginEdit již byly volány a ignorovány 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á BeginEdit volání nemohou zničit aktualizace, které byly provedeny, nebo změnit data uložená při prvním BeginEdit volání.

    • Metoda EndEdit nasdílí všechny změny, které BeginEdit byly volána do podkladového objektu, pokud je objekt aktuálně v režimu úprav.

    • Metoda CancelEdit zahodí všechny změny provedené v objektu.

    Další informace o tom, jak fungují BeginEdit, EndEdita CancelEdit metody naleznete v tématu Uložení dat zpět do databáze.

    Tento transakční pojem funkce dat je používán ovládacím DataGridView prvek.

  • ICancelAddNew Rozhraní

    Třída, která implementuje ICancelAddNew rozhraní obvykle implementuje IBindingList rozhraní a umožňuje vrátit zpět přidání do zdroje dat metodou AddNew . Pokud váš zdroj dat implementuje IBindingList rozhraní, měli byste ho ICancelAddNew mít také implementovat.

  • IDataErrorInfo Rozhraní

    Třída, která implementuje IDataErrorInfo rozhraní umožňuje objektům nabízet vlastní informace o chybách vázané ovládací prvky:

    • Vlastnost Error vrátí obecný text chybové zprávy (například "Došlo k chybě").

    • Vlastnost Item[] vrátí řetězec s konkrétní chybovou zprávou ze sloupce (například hodnota ve State sloupci je neplatná).

  • IEnumerable Rozhraní

    Třída, která implementuje IEnumerable rozhraní, je obvykle spotřebována ASP.NET. model Windows Forms podpora tohoto rozhraní je k dispozici pouze prostřednictvím BindingSource komponenty.

    Poznámka:

    Komponenta BindingSource zkopíruje všechny IEnumerable položky do samostatného seznamu pro účely vazby.

  • ITypedList Rozhraní

    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:

    Při implementaci GetItemProperties metody a PropertyDescriptor pole není null, poslední položka v poli bude popisovač vlastnosti popisovač, který popisuje list vlastnost, která je dalším seznamem položek.

  • ICustomTypeDescriptor Rozhraní

    Třída, která implementuje ICustomTypeDescriptor rozhraní poskytuje dynamické informace o sobě. Toto rozhraní je podobné ITypedList , ale používá se pro objekty místo seznamů. Toto rozhraní se používá DataRowView k promítání schématu podkladových řádků. Jednoduchá implementace ICustomTypeDescriptor je poskytována CustomTypeDescriptor třídou.

    Poznámka:

    Chcete-li podporovat vazbu v době návrhu na typy, které implementují ICustomTypeDescriptor, musí tento typ také implementovat IComponent a existovat jako instance ve formuláři.

  • IListSource Rozhraní

    Třída, která implementuje IListSource rozhraní umožňuje vazby založené na seznamu na objekty mimo seznam. Metoda GetListIListSource se používá k vrácení seznamu bindable z objektu, který nedědí z IList. IListSource je používán DataSet třídou.

  • IRaiseItemChangedEvents Rozhraní

    Třída, která implementuje IRaiseItemChangedEvents rozhraní je bindable seznam, který také implementuje IBindingList rozhraní. Toto rozhraní slouží k označení, zda váš typ vyvolává ListChanged události typu ItemChanged prostřednictvím jeho RaisesItemChangedEvents vlastnosti.

    Poznámka:

    Měli byste implementovat IRaiseItemChangedEvents , pokud zdroj dat poskytuje vlastnost pro výpis převodu událostí popsaných výše a pracuje s komponentou BindingSource . BindingSource Jinak také provede vlastnost pro výpis převodu událostí, což vede k pomalejšímu výkonu.

  • ISupportInitialize Rozhraní

    Komponenta, která implementuje ISupportInitialize rozhraní, využívá výhod dávkových optimalizací pro nastavení vlastností a inicializaci vlastností závislých na spoluvytvářené vlastnosti. Obsahuje ISupportInitialize dvě metody:

    • BeginInit signály, že inicializace objektů je spuštěna.

    • EndInit signály, že inicializace objektů je dokončována.

  • ISupportInitializeNotification Rozhraní

    Komponenta, která implementuje ISupportInitializeNotification rozhraní, také implementuje ISupportInitialize rozhraní. Toto rozhraní umožňuje upozornit ostatní ISupportInitialize komponenty, že inicializace je dokončena. Rozhraní ISupportInitializeNotification obsahuje dva členy:

  • INotifyPropertyChanged Rozhraní

    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>, obchodní objekt by 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áš vázaný typ zdroje dat buď implementovat INotifyPropertyChanged rozhraní (upřednostňované), nebo můžete zadat události propertyNameChanged pro vázaný typ, ale neměli byste dělat obojí.

Rozhraní pro implementaci autory komponent

Následující rozhraní jsou navržená pro spotřebu strojem model Windows Forms datových vazeb:

Viz také