Sdílet prostřednictvím


Architektura komponenty BindingSource

Pomocí komponenty BindingSource můžete všechny ovládací prvky Modelu Windows Forms svázat se zdroji dat.

Komponenta BindingSource zjednodušuje proces ovládacích prvků vazby ke zdroji dat a poskytuje následující výhody oproti tradiční datové vazbě:

  • Umožňuje vazbu v době návrhu na obchodní objekty.

  • Zapouzdřuje CurrencyManager funkcionalitu a zpřístupňuje události CurrencyManager v době návrhu.

  • Zjednodušuje vytváření seznamu, který podporuje rozhraní IBindingList tím, že poskytuje oznámení o změně seznamu pro zdroje dat, které nativně nepodporují oznámení o změnách seznamu.

  • Poskytuje bod rozšiřitelnosti pro metodu IBindingList.AddNew.

  • Poskytuje úroveň nepřímého rozdělení mezi zdrojem dat a kontrolou. Tato nepřímost je důležitá, když se zdroj dat může změnit za běhu.

  • Spolupracuje s jinými ovládacími prvky Windows Forms souvisejícími s daty, konkrétně s BindingNavigator a ovládacími prvky DataGridView.

Z těchto důvodů je upřednostňovaným způsobem vytvoření vazby ovládacích prvků Windows Forms ke zdrojům dat komponenta BindingSource.

Funkce BindingSource

Komponenta BindingSource poskytuje několik funkcí pro vazbové ovládací prvky s daty. Díky těmto funkcím můžete implementovat většinu scénářů datových vazeb s téměř žádným kódováním na vaší straně.

Komponenta BindingSource toho dosahuje tím, že poskytuje konzistentní rozhraní pro přístup k mnoha různým druhům zdrojů dat. To znamená, že pro připojení k libovolnému typu použijete stejný postup. Můžete například připojit vlastnost DataSource k DataSet nebo obchodnímu objektu a v obou případech použít stejnou sadu vlastností, metod a událostí pro manipulaci se zdrojem dat.

Konzistentní rozhraní poskytované komponentou BindingSource výrazně zjednodušuje proces vazby dat k ovládacím prvkům. U typů zdrojů dat, které poskytují oznámení o změně, komponenta BindingSource automaticky komunikuje změny mezi ovládacím prvku a zdrojem dat. U typů zdrojů dat, které neposkytují oznámení o změnách, jsou k dispozici události, které umožňují vyvolat oznámení o změnách. Následující seznam obsahuje funkce podporované komponentou BindingSource:

Bezcílnost

Komponenta BindingSource poskytuje úroveň nepřímého propojení mezi ovládacím prvek a zdrojem dat. Namísto vazby ovládacího prvku přímo ke zdroji dat vytvoříte vazbu ovládacího prvku na BindingSourcea zdroj dat připojíte k vlastnosti DataSource komponenty BindingSource.

S touto úrovní nepřímých změn můžete změnit zdroj dat bez resetování řídicí vazby. Získáte tak následující možnosti:

Správa měn

Komponenta BindingSource implementuje rozhraní ICurrencyManagerProvider pro zpracování správy měn za vás. S rozhraním ICurrencyManagerProvider můžete také přistupovat k měnovému správci pro BindingSource, a kromě toho také k měnovému správci pro další BindingSource, které je svázané se stejnými DataMember.

Komponenta BindingSource zapouzdřuje funkcionalitu CurrencyManager a zveřejňuje ty nejběžnější vlastnosti a události CurrencyManager. Následující tabulka popisuje některé členy související se správou měn.

vlastnost CurrencyManager
Získá správce měny přidružené k BindingSource.

metoda GetRelatedCurrencyManager
Pokud je k zadanému datovému členu vázán jiný BindingSource, získává správce měn.

vlastnost Current
Získá aktuální položku zdroje dat.

vlastnost Position
Získá nebo nastaví aktuální pozici v podkladovém seznamu.

metoda EndEdit
Použije čekající změny na výchozí zdroj dat.

metoda CancelEdit
Zruší aktuální operaci úprav.

Zdroj dat jako seznam

Komponenta BindingSource implementuje rozhraní IBindingListView a ITypedList. Při této implementaci můžete použít samotnou komponentu BindingSource jako zdroj dat bez jakéhokoli externího úložiště.

Když je komponenta BindingSource připojená ke zdroji dat, zpřístupní zdroj dat jako seznam.

Vlastnost DataSource lze nastavit na několik zdrojů dat. Patří mezi ně typy, objekty a seznamy typů. Výsledný zdroj dat se zobrazí jako seznam. Následující tabulka uvádí některé běžné zdroje dat a výsledné vyhodnocení seznamu.

Vlastnost DataSource Výpis výsledků
Nulový odkaz (Nothing v jazyce Visual Basic) Prázdný IBindingList objektů. Přidání položky nastaví seznam na typ přidané položky.
Nulový odkaz (Nothing v jazyce Visual Basic) s nastavením DataMember Nepodporováno; vyvolává ArgumentException.
Netyp seznamu nebo objekt typu "T" Prázdný IBindingList typu "T".
Instance pole IBindingList obsahující prvky pole.
instance IEnumerable IBindingList obsahující položky IEnumerable
Výpis instance obsahující typ "T" Instance IBindingList obsahující typ "T".

Kromě toho lze DataSource nastavit na jiné typy seznamů, jako jsou IListSource a ITypedLista BindingSource je zpracuje odpovídajícím způsobem. V tomto případě by typ obsažený v seznamu měl mít konstruktor bez parametrů.

BindingSource jako IBindingList

Komponenta BindingSource poskytuje členům přístup k podkladovým datům a manipulaci s nimi jako IBindingList. Následující tabulka popisuje některé z těchto členů.

Člen Popis
vlastnost List Získá seznam, který je výsledkem vyhodnocení DataSource nebo DataMember vlastností.
metoda AddNew Přidá novou položku do podkladového seznamu. Platí pro zdroje dat, které implementují rozhraní IBindingList a umožňují přidávání položek (to znamená, že vlastnost AllowNew je nastavena na true).

Vytvoření vlastní položky

Můžete zpracovat událost AddingNew a poskytnout tak vlastní logiku vytváření položek. Událost AddingNew nastane před přidání nového objektu do BindingSource. Tato událost je vyvolána po zavolání metody AddNew, ale před přidáním nové položky do podkladového seznamu. Při zpracování této události můžete umožnit vlastní chování při vytváření položek bez odvození z třídy BindingSource. Další informace naleznete v tématu Jak: Přizpůsobit přidání položky s Windows Forms BindingSource.

Vytvoření transakční položky

Komponenta BindingSource implementuje rozhraní ICancelAddNew, které umožňuje vytvoření transakční položky. Po prozatímním vytvoření nové položky pomocí volání AddNewmůže být přidání potvrzeno nebo vráceno zpět následujícími způsoby:

  • Metoda EndNew explicitně potvrdí čekající přidání.

  • Provedení jiné operace shromažďování, jako je vložení, odebrání nebo přesunutí, implicitně potvrdí nevyřízené přidání.

  • Metoda CancelNew vrátí nevyřízené přidání zpět, pokud metoda ještě nebyla potvrzena.

Podpora IEnumerable

Komponenta BindingSource umožňuje ovládacím prvkům propojení se zdroji dat IEnumerable. S touto komponentou můžete vytvořit vazbu ke zdroji dat, jako je System.Data.SqlClient.SqlDataReader.

Když je IEnumerable zdroj dat přiřazen ke komponentě BindingSource, BindingSource vytvoří IBindingList a přidá do seznamu obsah zdroje dat IEnumerable.

podpora Design-Time

Některé typy objektů nelze vytvořit v době návrhu, například objekty vytvořené z třídy továrny nebo objekty vrácené webovou službou. Někdy může být nutné svázat ovládací prvky s těmito typy v době návrhu, i když v paměti není žádný objekt, ke kterému mohou ovládací prvky vytvořit vazbu. Můžete například označit záhlaví sloupců ovládacího prvku DataGridView názvy veřejných vlastností vašeho vlastního typu.

Pro podporu tohoto scénáře komponenta BindingSource podporuje vazbu na Type. Když přiřadíte Type k vlastnosti DataSource, vytvoří komponenta BindingSource prázdný BindingList<T> položek typu Type. Všechny ovládací prvky, které následně svážete s komponentou BindingSource, budou upozorněny na přítomnost vlastností nebo schématu vašeho typu v době návrhu nebo v době běhu. Další informace naleznete v tématu Postupy: Vytvoření vazby ovládacího prvku Windows Forms na typ.

Statické metody ListBindingHelper

System.Windows.Forms.BindingContext, System.Windows.Forms.CurrencyManagera BindingSource typy všechny sdílejí společnou logiku pro vygenerování seznamu z páru DataSource/DataMember. Kromě toho je tato běžná logika veřejně zpřístupněná pro použití autory ovládacích prvků a jinými třetími stranami v následujících metodách static:

Řazení a filtrování pomocí rozhraní IBindingListView

Komponenta BindingSource implementuje rozhraní IBindingListView, které rozšiřuje rozhraní IBindingList. IBindingList nabízí řazení s jedním sloupcem a IBindingListView nabízí rozšířené řazení a filtrování. S IBindingListViewmůžete položky ve zdroji dat řadit a filtrovat, pokud zdroj dat také implementuje jedno z těchto rozhraní. Komponenta BindingSource neposkytuje referenční implementaci těchto členů. Místo toho se volání přesměrují do podkladového seznamu.

Následující tabulka popisuje vlastnosti, které používáte k řazení a filtrování.

Člen Popis
vlastnost Filter Pokud je zdrojem dat IBindingListView, získá nebo nastaví výraz použitý k filtrování zobrazených řádků.
vlastnost Sort Pokud je zdrojem dat IBindingList, získá nebo nastaví název sloupce používaného pro řazení a informace o pořadí řazení.

-nebo-

Pokud je zdrojem dat IBindingListView a podporuje pokročilé třídění, přijímá názvy více sloupců používané pro řazení a pořadí třídění.

Integrace s BindingNavigatorem

Komponentu BindingSource můžete použít k vytvoření vazby libovolného ovládacího prvku Windows Forms ke zdroji dat, ale ovládací prvek BindingNavigator je navržený speciálně pro práci s komponentou BindingSource. Ovládací prvek BindingNavigator poskytuje uživatelské rozhraní pro řízení aktuální položky komponenty BindingSource. Ve výchozím nastavení ovládací prvek BindingNavigator poskytuje tlačítka, která odpovídají navigačním metodám v BindingSource komponentě. Další informace najdete v tématu Postupy: Navigace v datech pomocí ovládacího prvku BindingNavigator ve Windows Forms.

Viz také