Sdílet prostřednictvím


Přehled datových vazeb (model Windows Forms .NET)

V model Windows Forms můžete svázat nejen s tradičními zdroji dat, ale také s téměř jakoukoli strukturou, která obsahuje data. Můžete vytvořit vazbu na pole hodnot, které vypočítáte za běhu, číst ze souboru nebo odvodit z hodnot jiných ovládacích prvků.

Kromě toho můžete svázat libovolnou vlastnost libovolného ovládacího prvku se zdrojem dat. V tradiční datové vazbě obvykle svážete vlastnost zobrazení ( Text například vlastnost TextBox ovládacího prvku) se zdrojem dat. V .NET máte také možnost nastavit další vlastnosti prostřednictvím vazby. K provedení následujících úloh můžete použít vazbu:

  • Nastavení grafiky ovládacího prvku obrázku

  • Nastavení barvy pozadí jednoho nebo více ovládacích prvků

  • Nastavení velikosti ovládacích prvků

Datová vazba je v podstatě automatický způsob nastavení jakékoli vlastnosti přístupnosti za běhu libovolného ovládacího prvku ve formuláři.

ADO.NET umožňuje vytvářet mnoho různých datových struktur tak, aby vyhovovaly 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 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 rozhraní je implementována ve zdrojích dat autory zdrojů dat. Příjemci zdrojů dat, jako jsou například ovládací prvky model Windows Forms nebo komponenty, implementují tato rozhraní. Druhá skupina rozhraní je navržená pro použití autory komponent. Autoři komponent používají tato rozhraní při vytváření komponenty, která podporuje datovou vazbu, kterou využívá modul datových vazeb model Windows Forms. Tato rozhraní můžete implementovat v rámci tříd přidružených k vašemu formuláři a povolit tak 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

Ovládací prvky model Windows Forms implementují následující rozhraní:

  • IList Rozhraní

    Třída, která implementuje IList rozhraní, může být , ArrayArrayListnebo CollectionBase. Jedná se o indexované seznamy položek typu Object a 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 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. Obě jsou užitečné při změně položek seznamu a při změně samotného seznamu. Oznámení o změnách je důležité, pokud plánujete mít více ovládacích prvků svázané se stejnými daty. Pomáhá provádět změny dat provedených v jednom z ovládacích prvků, které se rozšíří 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, spolu s filtrováním a pokročilými funkcemi řazení. Tato implementace nabízí filtrování založené na řetězcích a řazení s více sloupci 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 podporuje 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 s ostatními, 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í byla nedestruktivní. 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í

    Kolekce třída, která implementuje ITypedList rozhraní poskytuje funkci pro řízení pořadí a sady 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áš typ vázaného 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:

Zdroje dat podporované model Windows Forms

Tradičně se datová vazba používala v aplikacích k využití dat uložených v databázích. S model Windows Forms datovou vazbou můžete přistupovat k datům z databází a dat v jiných strukturách, jako jsou pole a kolekce, pokud byly splněny určité minimální požadavky.

Struktury pro vytvoření vazby na

V model Windows Forms můžete vytvořit vazbu na širokou škálu struktur, od jednoduchých objektů (jednoduchá vazba) až po komplexní seznamy, jako jsou tabulky dat ADO.NET (složitá vazba). Pro jednoduchou vazbu model Windows Forms podporovat vazbu na veřejné vlastnosti v jednoduchém objektu. model Windows Forms vazby založené na seznamu obecně vyžadují, aby objekt podporoval IList rozhraní nebo IListSource rozhraní. Kromě toho, pokud jste vázáni prostřednictvím BindingSource komponenty, můžete vytvořit vazbu k objektu, který podporuje IEnumerable rozhraní.

Následující seznam ukazuje struktury, se které můžete svázat v model Windows Forms.

  • BindingSource

    A BindingSource je nejběžnější model Windows Forms zdroj dat a funguje proxy mezi zdrojem dat a ovládacími prvky model Windows Forms. Vzor obecného BindingSource použití spočívá v vytvoření vazby ovládacích prvků na BindingSource zdroj dat a vytvoření vazby BindingSource ke zdroji dat (například k ADO.NET tabulce dat nebo obchodnímu objektu). Poskytuje BindingSource služby, které umožňují a zlepšují úroveň podpory datových vazeb. Například model Windows Forms seznam ovládacích prvků, jako je například ovládací prvky, které DataGridView přímo ComboBox nepodporují vazbu ke IEnumerable zdrojům dat, můžete tento scénář povolit vazbou prostřednictvím vazby BindingSource. V tomto případě BindingSource převede zdroj dat na .IList

  • Jednoduché objekty

    model Windows Forms podporovat vlastnosti ovládacího prvku datové vazby na veřejné vlastnosti instance objektu pomocí Binding typu. model Windows Forms také podporují ovládací prvky založené na seznamu vazeb, jako ListControl je například instance objektu při BindingSource použití.

  • Pole nebo kolekce

    Aby se seznam mohl chovat jako zdroj dat, musí implementovat IList rozhraní. Jedním z příkladů by bylo pole, které je instancí Array třídy. Další informace o polích naleznete v tématu Postupy: Vytvoření pole objektů (Visual Basic).

    Obecně byste měli použít BindingList<T> při vytváření seznamů objektů pro datové vazby. BindingList je obecná verze IBindingList rozhraní. Rozhraní IBindingList rozšiřuje IList rozhraní přidáním vlastností, metod a událostí nezbytných pro obousměrnou datovou vazbu.

  • IEnumerable

    model Windows Forms ovládací prvky mohou být vázány na zdroje dat, které podporují IEnumerable pouze rozhraní, pokud jsou svázané prostřednictvím BindingSource komponenty.

  • ADO.NET datových objektů

    ADO.NET poskytuje mnoho datových struktur vhodných pro vazbu. Každá z nich se liší ve své sofistikovanosti a složitosti.

    • DataColumn

      A DataColumn je základním stavebním blokem , DataTablev tom, že více sloupců tvoří tabulku. Každá DataColumn z nich má DataType vlastnost, která určuje druh dat, která sloupec obsahuje (například název automobilu v tabulce popisující auta). Ovládací prvek (například TextBox vlastnost ovládacího prvku Text ) můžete jednoduše svázat se sloupcem v tabulce dat.

    • DataTable

      A DataTable je reprezentace tabulky s řádky a sloupci v ADO.NET. Tabulka dat obsahuje dvě kolekce: DataColumnpředstavující sloupce dat v dané tabulce (které nakonec určují druhy dat, které lze do této tabulky zadat) a DataRowpředstavují řádky dat v dané tabulce. Ovládací prvek můžete složitě svázat s informacemi obsaženými v tabulce dat (například vazbu DataGridView ovládacího prvku na tabulku dat). Když ale svážete vazbu na , DataTablejste vazbou na výchozí zobrazení tabulky.

    • DataView

      A DataView je přizpůsobené zobrazení jedné tabulky dat, která může být filtrována nebo seřazena. Zobrazení dat je datový snímek používaný komplexními ovládacími prvky. S daty v zobrazení dat můžete vytvořit jednoduchou vazbu nebo komplexní vazbu, ale všimněte si, že se připojujete k pevnému "obrázku" dat, nikoli k čisté aktualizaci zdroje dat.

    • DataSet

      A DataSet je kolekce tabulek, relací a omezení dat v databázi. K datům v datové sadě můžete vytvořit jednoduchou vazbu nebo komplexní vazbu, ale všimněte si, že pro tuto DataSet datovou sadu používáte vazbu na výchozí DataViewManager hodnotu (viz další odrážka).

    • DataViewManager

      A DataViewManager je přizpůsobený pohled na celý DataSet, analogický s DataView, ale s relacemi zahrnutými. DataViewSettings V kolekci můžete nastavit výchozí filtry a možnosti řazení pro všechna zobrazení, která DataViewManager mají pro danou tabulku.

Typy datových vazeb

model Windows Forms mohou využívat dva typy datových vazeb: jednoduchou vazbu a složitou vazbu. Každá z nich nabízí různé výhody.

Typ datové vazby Popis
Jednoduchá datová vazba Schopnost ovládacího prvku vytvořit vazbu na jeden datový prvek, například hodnotu ve sloupci v tabulce datové sady. Jednoduchá datová vazba je typ vazby typický pro ovládací prvky, jako TextBox je ovládací prvek nebo Label ovládací prvek, což jsou ovládací prvky, které obvykle zobrazují pouze jednu hodnotu. Ve skutečnosti může být jakákoli vlastnost ovládacího prvku svázána s polem v databázi. V sadě Visual Studio je k dispozici rozsáhlá podpora této funkce.

Další informace najdete v tématu Navigace dat a vytvoření jednoduchého vázaného ovládacího prvku (model Windows Forms .NET).
Složitá datová vazba Schopnost ovládacího prvku vytvořit vazbu na více než jeden datový prvek, obvykle více než jeden záznam v databázi. Komplexní vazby se také nazývají vazby založené na seznamu. Příklady ovládacích prvků, které podporují komplexní vazbu, jsou DataGridView, ListBoxa ComboBox ovládací prvky. Příklad komplexní datové vazby najdete v tématu Postupy: Vytvoření vazby ovládacího prvku model Windows Forms ComboBox nebo ListBox k datům.

Vazba zdrojové komponenty

Pro zjednodušení datové vazby model Windows Forms umožňuje vytvořit vazbu zdroje dat ke komponentě BindingSource a následnou vazbu ovládacích prvků na BindingSource. Můžete použít BindingSource v jednoduchých nebo složitých scénářích vazeb. V obou případech BindingSource funguje jako zprostředkovatel mezi zdrojem dat a vázanými ovládacími prvky, které poskytují správu měn oznámení o změnách a další služby.

Běžné scénáře, které využívají datové vazby

Téměř každá komerční aplikace používá informace čtené ze zdrojů dat jednoho typu nebo jiného, obvykle prostřednictvím datové vazby. Následující seznam ukazuje několik nejběžnějších scénářů, které jako metodu prezentace a manipulace s daty využívají datovou vazbu.

Scénář Popis
Vykazování Sestavy poskytují flexibilní způsob, jak zobrazit a shrnout data v tištěném dokumentu. Je běžné vytvořit sestavu, která vytiskne vybraný obsah zdroje dat buď na obrazovku, nebo na tiskárnu. Mezi běžné sestavy patří seznamy, faktury a souhrny. Položky jsou formátované do sloupců seznamů s dílčími položkami uspořádanými pod jednotlivými položkami seznamu, ale měli byste zvolit rozložení, které nejlépe vyhovuje datům.
Zadání dat Běžným způsobem, jak zadat velké množství souvisejících dat nebo vyzvat uživatele k zadání informací, je prostřednictvím formuláře pro zadávání dat. Uživatelé mohou zadat informace nebo vybrat volby pomocí textových polí, přepínačů, rozevíracích seznamů a zaškrtávacích políček. Informace se pak odesílají a ukládají do databáze, jejíž struktura je založená na zadaných informacích.
Vztah předlohy a podrobností Hlavní/podrobná aplikace je jedním formátem pro zobrazení souvisejících dat. Konkrétně existují dvě tabulky dat s relacemi, které se připojují v klasickém obchodním příkladu, tabulka Customers (Zákazníci) a tabulka Orders (Objednávky) s relací mezi nimi, která propojuje zákazníky a jejich objednávky. Další informace o vytvoření hlavní/podrobné aplikace se dvěma ovládacími prvky model Windows Forms DataGridView najdete v tématu Postupy: Vytvoření hlavního/podrobného formuláře pomocí dvou ovládacích prvků DataGridView model Windows Forms
Vyhledávací tabulka Dalším běžným scénářem prezentace a manipulace s daty je vyhledávání tabulek. Ovládací prvek se často používá jako součást většího zobrazení ComboBox dat k zobrazení dat a manipulaci s nimi. Klíčem je to, že data zobrazená v ovládacím ComboBox prvku se liší od dat zapsaných do databáze. Pokud máte ComboBox například ovládací prvek zobrazující položky dostupné z obchodu s potravinami, pravděpodobně byste chtěli vidět názvy produktů (chléb, mléko, vejce). Chcete-li však usnadnit načítání informací v databázi a normalizaci databáze, pravděpodobně byste uložili informace pro konkrétní položky dané objednávky jako čísla položek (#501, #603 atd.). Proto existuje implicitní spojení mezi "popisným názvem" položky potravin v ovládacím prvku ve ComboBox formuláři a souvisejícím číslem položky, které je přítomné v objednávce. Je to podstata vyhledávání v tabulce. Další informace naleznete v tématu Postupy: Vytvoření vyhledávací tabulky pomocí komponenty model Windows Forms BindingSource.

Viz také