Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve 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í ( například vlastnost Text ovládacího prvku TextBox) 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 u prvku ovládání 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.
Rozhraní související s datovými vazbami
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 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 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 ovládací prvky 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 a kterou využívá modul datové vazby 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 Windows Forms implementují následující rozhraní:
rozhraní IList
Třída, která implementuje rozhraní IList může být Array, ArrayListnebo 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.
IListby 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>.
BindingListje 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. 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 rozhraní IBindingList prostřednictvím vlastnosti SupportsChangeNotification, která při
truevyvolá 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, 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í.
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 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,EndEditaCancelEditmetod 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 volání metody
BeginEditzpůsobem, aby aktualizace lze zahodit, pokud je volána metoda CancelEdit. V datové vazbě Windows Forms můžete volatBeginEditvícekrát v rámci jedné transakce úprav (napříkladBeginEdit,BeginEdit, EndEdit). Implementace IEditableObject by měly kontrolovat, zda již bylBeginEditvolá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í byla nedestruktivní. NáslednáBeginEditvolání nemohou zničit aktualizace, které byly provedeny, nebo změnit data uložená při prvnímBeginEditvolání.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 řízení pořadí a sady vlastností přenášených do vázaného ovládacího 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
ICustomTypeDescriptorje 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
IListSourcese používá k vrácení seznamu bindable z objektu, který nedědí z IList.TřídaIListSourcepoužívá DataSet.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
BindingSourcetaké 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í.
ISupportInitializeobsahuje 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íISupportInitializeNotificationobsahuje dva členy:IsInitialized vrátí hodnotu
booleanoznač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 INotifyPropertyChanged rozhraní (upřednostňované), nebo můžete zadat události propertyName
Changedpro 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 IBindableComponent rozhraní.
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
CurrencyManagerje 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é.
Zdroje dat podporované Windows Forms
Tradičně se datová vazba používala v aplikacích k využití dat uložených v databázích. Pomocí datové vazby Modelu Windows Forms 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 k navázání
Ve Windows Forms můžete vytvořit vazbu na širokou škálu struktur, od jednoduchých objektů (jednoduchá vazba) až po složité seznamy, jako jsou tabulky dat ADO.NET (složitá vazba). Pro jednoduchou vazbu windows Forms podporují vazbu na veřejné vlastnosti v jednoduchém objektu. Vazby modelu Windows Forms založené na seznamech obecně vyžadují, aby objekt podporoval rozhraní IList nebo rozhraní IListSource. 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 modelu Windows Forms.
-
BindingSource je nejběžnějším zdrojem dat Windows Forms a funguje jako proxy server mezi zdrojem dat a ovládacími prvky Windows Forms. Obecný vzor použití
BindingSourcespočívá v vytvoření vazby ovládacích prvků naBindingSourcea vytvoření vazbyBindingSourceke zdroji dat (například k ADO.NET tabulce dat nebo obchodnímu objektu).BindingSourceposkytuje služby, které umožňují a zlepšují úroveň podpory datových vazeb. Například ovládací prvky Windows Forms založené na seznamech, jako je DataGridView a ComboBox, přímo nepodporují vazbu na zdroje dat IEnumerable. Tento scénář však můžete povolit vazbou prostřednictvímBindingSource. V tomto případěBindingSourcepřevede zdroj dat na IList. Jednoduché objekty
Windows Forms podporují navázání vlastností ovládacího prvku na veřejné vlastnosti instance objektu pomocí typu Binding. Windows Forms také podporuje ovládací prvky, které se vážou na seznam, jako ListControl na instanci objektu, když je použito BindingSource.
Pole nebo kolekce
Aby fungoval jako zdroj dat, musí seznam implementovat rozhraní IList; Jedním z příkladů je pole, které je instancí třídy Array. Další informace o polích naleznete v tématu Postupy: Vytvoření pole objektů (Visual Basic).
Obecně platí, že při vytváření seznamů objektů pro datové vazby byste měli použít BindingList<T>.
BindingListje obecná verze rozhraní IBindingList. RozhraníIBindingListrozšiřuje rozhraní IList přidáním vlastností, metod a událostí nezbytných pro obousměrnou datovou vazbu.-
Ovládací prvky Windows Forms můžou být svázány se zdroji dat, které podporují pouze rozhraní IEnumerable, pokud jsou svázány prostřednictvím komponenty BindingSource.
ADO.NET datové objekty
ADO.NET poskytuje mnoho datových struktur vhodných pro vazbu. Každá z nich se liší ve své sofistikovanosti a složitosti.
-
Element DataColumn je základním stavebním blokem DataTable, protože více sloupců tvoří tabulku. Každá
DataColumnmá vlastnost DataType, která určuje druh dat, která sloupec obsahuje (například značka automobilu v tabulce popisující auta). Ovládací prvek (například vlastnost TextBox ovládacího prvku Text) můžete jednoduše svázat se sloupcem v tabulce dat. -
DataTable je reprezentace tabulky s řádky a sloupci v ADO.NET. Tabulka dat obsahuje dvě kolekce: DataColumn, představující sloupce dat v dané tabulce (které nakonec určují druhy dat, které lze do této tabulky zadat) a DataRow, představující řádky dat v dané tabulce. Ovládací prvek můžete složitě svázat s informacemi obsaženými v tabulce dat (například svázat ovládací prvek DataGridView s tabulkou dat). Když však provedete vazbu na
DataTable, vytvoříte vazbu na výchozí zobrazení tabulky. -
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 jednoduché připojení nebo komplexní připojení, ale uvědomte si, že se připojujete k pevnému "obrázku" dat, nikoliv k aktuálně se aktualizujícímu čistému zdroji dat.
-
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 DataViewManager datovou sadu používáte vazbu na výchozí
DataSethodnotu (viz další odrážka). -
DataViewManager je přizpůsobený pohled na celý DataSet, podobně jako DataView, ale s relacemi zahrnutými. S kolekcí DataViewSettings můžete nastavit výchozí filtry a možnosti řazení pro všechna zobrazení, která
DataViewManagerobsahuje pro danou tabulku.
-
Typy datových vazeb
Windows Forms může 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 typická pro ovládací prvky, jako je TextBox nebo Label, 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 naleznete v tématu Navigace dat a vytvoření jednoduchého vázaného ovládacího prvku (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 ovládací prvky DataGridView, ListBoxa ComboBox. Příklad komplexní datové vazby najdete v tématu Jak: Připojit ovládací prvek Windows Forms ComboBox nebo ListBox k datům. |
Komponenta pro vazbu zdroje
Pro zjednodušení datové vazby windows Forms umožňuje vytvořit vazbu zdroje dat s komponentou BindingSource a poté vytvořit vazbu ovládacích prvků na BindingSource.
BindingSource můžete použít ve scénářích jednoduchých nebo složitých vazeb. V obou případech BindingSource působí jako zprostředkovatel mezi zdrojem dat a vázanými ovládacími prvky a poskytuje oznámení o změnách, správu měn 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 |
|---|---|
| Reportování | Sestavy poskytují flexibilní způsob, jak zobrazit a shrnout data v tištěném dokumentu. Je obvyklé vytvořit sestavu, která tiskne vybraný obsah zdroje dat buď na monitor, 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ává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 Windows Forms DataGridView naleznete v tématu Postupy: Vytvoření hlavního/podrobného formuláře pomocí dvou ovládacích prvků Windows Forms DataGridView. |
| Vyhledávací tabulka | Dalším běžným scénářem prezentace a manipulace s daty je vyhledávání tabulek. Často se jako součást většího zobrazení dat používá ovládací prvek ComboBox k zobrazení a manipulaci s daty. Klíčem je to, že data zobrazená v ovládacím prvku ComboBox se liší od dat zapsaných do databáze. Pokud máte například ovládací prvek ComboBox 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 Windows Forms BindingSource. |
Viz také
.NET Desktop feedback