Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows Formsban nemcsak a hagyományos adatforrásokhoz, hanem szinte minden olyan struktúrához is kapcsolódhat, amely adatokat tartalmaz. Köthet olyan értéktömbhöz, amelyet futásidőben számít ki, egy fájlból olvas, vagy más vezérlők értékeiből származtat.
Emellett bármilyen vezérlőelem tulajdonságát az adatforráshoz kötheti. A hagyományos adatkötésben általában a megjelenítési tulajdonságot – például egy Text vezérlőelem TextBox tulajdonságát – köti az adatforráshoz. A .NET-ben más tulajdonságokat is beállíthat kötéssel. A következő feladatok végrehajtásához használhat kötést:
Képvezérlő képének beállítása.
Egy vagy több vezérlő háttérszínének beállítása.
A vezérlők méretének beállítása.
Az adatkötés lényegében egy automatikus módja annak, hogy bármilyen vezérlőelem futásidejű akadálymentes tulajdonságát beállítsa egy űrlapon.
Adatkötéshez kapcsolódó felületek
ADO.NET számos különböző adatstruktúrát hozhat létre az alkalmazás kötési igényeinek és a használni kívánt adatoknak megfelelően. Előfordulhat, hogy saját osztályokat szeretne létrehozni, amelyek adatokat szolgáltatnak vagy használnak fel a Windows Formsban. Ezek az objektumok különböző funkcionalitási és összetettségi szinteket kínálnak. Az alapszintű adatkötéstől kezdve a tervezési idő támogatásának biztosításáig, a hibaellenőrzésig, a változásértesítésig vagy akár az adatokon végrehajtott módosítások strukturált visszaállításának támogatásához.
Adatkötési felületek felhasználói
A következő szakaszok az interfészobjektumok két csoportját ismertetik. Az első interfészcsoportot adatforrás-szerzők implementálják adatforrásokon. Az adatforrás felhasználói, például a Windows Forms vezérlői vagy összetevői implementálják ezeket az interfészeket. A felület második csoportját az összetevők szerzői használják. Az összetevők szerzői akkor használják ezeket a felületeket, amikor olyan összetevőt hoznak létre, amely támogatja a Windows Forms adatkötési motor által használandó adatkötést. Ezeket az interfészeket az űrlaphoz társított osztályokban implementálhatja az adatkötés engedélyezéséhez. Minden eset egy olyan osztályt mutat be, amely egy olyan felületet implementál, amely lehetővé teszi az adatokkal való interakciót. A Visual Studio gyorsalkalmazás-fejlesztési (RAD) adattervezési felhasználói eszközei már kihasználják ezt a funkciót.
Interfészek az adatforrás-készítők implementálásához
A Windows Forms vezérlői a következő felületeket implementálják:
IList felület
A IList felületet megvalósító osztály lehet Array, ArrayListvagy CollectionBase. Ezek a típuselemek Object indexelt listájai, és a listáknak homogén típusokat kell tartalmazniuk, mivel az index első eleme határozza meg a típust. A
IListcsak futásidőben lesz elérhető kötéshez.Megjegyzés:
Ha üzleti objektumok listáját szeretné létrehozni a Windows Formshoz való kötéshez, fontolja meg a BindingList<T>használatát. A
BindingListegy bővíthető osztály, amely megvalósítja a kétirányú Windows Forms-adatkötéshez szükséges elsődleges interfészeket.IBindingList felület
A IBindingList felületet implementáló osztály sokkal magasabb szintű adatkötési funkciókat biztosít. Ez az implementáció alapvető rendezési képességeket és változásértesítést kínál. Mindkettő akkor hasznos, ha a listaelemek megváltoznak, és ha maga a lista is megváltozik. A változásértesítés akkor fontos, ha több vezérlőt szeretne ugyanahhoz az adatokhoz kötni. Segítségével az egyik vezérlőben végrehajtott adatmódosításokat a többi kötött vezérlőre is propagálja.
Megjegyzés:
A változásértesítés engedélyezve van a IBindingList felületen a SupportsChangeNotification tulajdonságon keresztül, amely
trueesetén egy ListChanged eseményt hoz létre, amely azt jelzi, hogy a lista megváltozott vagy a lista egy eleme megváltozott.A változás típusát a ListChangedType paraméter ListChangedEventArgs tulajdonsága ismerteti. Ezért az adatmodell frissítésekor a függő nézetek, például az ugyanahhoz az adatforráshoz kötött egyéb vezérlők is frissülnek. A listában található objektumoknak azonban értesíteniük kell a listát a módosításukkor, hogy a lista fel tudja emelni a ListChanged eseményt.
Megjegyzés:
A BindingList<T> a IBindingList felület általános implementációját biztosítja.
IBindingListView felület
Az interfészt IBindingListView implementáló osztály a szűrési és speciális rendezési funkciókkal együtt biztosítja az implementáció összes funkcióját IBindingList. Ez az implementáció sztringalapú szűrést és többoszlopos rendezést kínál tulajdonságleíró-irány párokkal.
IEditableObject felület
A IEditableObject felületet megvalósító osztály lehetővé teszi, hogy az objektum szabályozza, mikor válnak véglegessé a rajta végrehajtott módosítások. Ez az implementáció támogatja a BeginEdit, EndEdités CancelEdit metódusokat, amelyek lehetővé teszik az objektumon végrehajtott módosítások visszaállítását. Az alábbiakban röviden bemutatjuk a , és metódusok működését
BeginEdit,EndEditvalamint azt,CancelEdithogy hogyan működnek együtt az adatok esetleges módosításának lehetővé tétele érdekében:A BeginEdit metódus jelzi egy objektum szerkesztésének kezdetét. Az interfészt megvalósító objektumoknak a
BeginEditmetódus hívása után úgy kell tárolniuk a frissítéseket, hogy a CancelEdit metódus meghívása esetén a frissítéseket el lehessen vetni. Az adatkötési Windows Formsban azBeginEdittöbbször is meghívható egyetlen szerkesztési tranzakció hatókörén belül (példáulBeginEdit,BeginEdit, EndEdit). A IEditableObject implementációinak nyomon kell követniük, hogy aBeginEdit-et már meghívták-e, és figyelmen kívül kell hagyniuk aBeginEditesetleges további hívásait. Mivel ezt a metódust többször is meghívhatja, fontos, hogy az azt követő hívások strukturálatlanok legyenek. A későbbiBeginEdithívások nem tudják megsemmisíteni a végrehajtott frissítéseket, és nem módosíthatják az elsőBeginEdithívásra mentett adatokat.A EndEdit metódus leküldi a módosításokat, mivel BeginEdit az alapul szolgáló objektumba lett meghívva, ha az objektum jelenleg szerkesztési módban van.
A CancelEdit metódus elveti az objektumon végrehajtott módosításokat.
A BeginEdit, a EndEdités a CancelEdit metódusok működésével kapcsolatos további információkért lásd: Adatok mentése az adatbázisba.
Az adatfunkciók tranzakciós fogalmát a DataGridView vezérlőelem használja.
ICancelAddNew felület
A ICancelAddNew interfészt implementáló osztály általában implementálja a IBindingList felületet, és lehetővé teszi, hogy a AddNew metódussal visszaállítsa az adatforráshoz készült kiegészítést. Ha az adatforrás implementálja a
IBindingListfelületet, akkor aICancelAddNewfelületet is implementálnia kell.IDataErrorInfo felület
A IDataErrorInfo felületet megvalósító osztály lehetővé teszi, hogy az objektumok egyéni hibainformációkat nyújtsanak a kötött vezérlőknek:
IEnumerable felület
A IEnumerable felületet megvalósító osztályt általában a ASP.NET használja. A windowsos űrlapok támogatása ehhez a felülethez csak a BindingSource összetevőn keresztül érhető el.
Megjegyzés:
A BindingSource összetevő kötés céljából az összes IEnumerable elemet egy külön listába másolja.
ITypedList felület
Az interfészt megvalósító ITypedList gyűjteményosztály a kötött vezérlőelemnek kitett sorrend és tulajdonságok halmazának szabályozására szolgál.
Megjegyzés:
Ha implementálja a GetItemProperties metódust, és a PropertyDescriptor tömb nem null értékű, a tömb utolsó bejegyzése a tulajdonságleíró lesz, amely az elemek másik listáját leíró listatulajdonságot írja le.
ICustomTypeDescriptor felület
A ICustomTypeDescriptor felületet megvalósító osztály dinamikus információkat nyújt magáról. Ez a felület hasonlít a ITypedList, de listák helyett objektumokhoz használatos. Ezt a felületet használja DataRowView a mögöttes sorok sémájának kivetítéséhez. A
ICustomTypeDescriptoregyszerű implementációját a CustomTypeDescriptor osztály biztosítja.Megjegyzés:
Az ICustomTypeDescriptorimplementálást megvalósító típusok tervezési idő szerinti kötésének támogatásához a típusnak IComponent is implementálnia kell, és példányként kell léteznie az űrlapon.
IListSource felület
A IListSource felületet implementáló osztály lehetővé teszi a listaalapú kötést a nem listás objektumokon. A GetList metódus
IListSourcea nem öröklő IListobjektumból származó, kötésre alkalmas lista visszaadására szolgál.IListSourceaz DataSet osztály használja.IRaiseItemChangedEvents felület
A IRaiseItemChangedEvents interfészt megvalósító osztály egy köthető lista, amely a IBindingList felületet is implementálja. Ez a felület jelzi, hogy a típus ListChangedItemChanged típusú eseményeket hoz-e létre a RaisesItemChangedEvents tulajdonságán keresztül.
Megjegyzés:
A IRaiseItemChangedEvents akkor kell implementálnia, ha az adatforrás megadja a korábban ismertetett eseménykonverzió listázására szolgáló tulajdonságot, és az BindingSource összetevővel kommunikál. Ellenkező esetben a
BindingSourcea tulajdonság- és eseménylisták átalakítását is végrehajtja, ami lassabb teljesítményt eredményez.ISupportInitialize felület
A ISupportInitialize felületet implementáló összetevő kihasználja a kötegoptimalizálás előnyeit a tulajdonságok beállításához és a társfüggő tulajdonságok inicializálásához. A
ISupportInitializekét metódust tartalmaz:ISupportInitializeNotification felület
A ISupportInitializeNotification interfészt implementáló összetevő a ISupportInitialize felületet is implementálja. Ezzel a felülettel értesítheti a többi
ISupportInitializeösszetevőt, hogy az inicializálás befejeződött. AISupportInitializeNotificationfelület két tagot tartalmaz:IsInitialized egy
booleanértéket ad vissza, amely jelzi, hogy az összetevő inicializálva van-e.Initialized akkor fordul elő, ha EndInit van meghívva.
INotifyPropertyChanged felület
Az interfészt megvalósító osztály olyan típus, amely eseményt hoz létre, amikor a tulajdonságértékek bármelyike megváltozik. Ezt a felületet úgy tervezték, hogy felváltsa a vezérlők minden tulajdonságához tartozó változási esemény mintáját. Amikor egy BindingList<T>-t használnak, az üzleti objektumnak implementálnia kell a INotifyPropertyChanged interfészt, és a BindingList`1 a(z) PropertyChanged eseményeket ListChangedtípusú ItemChanged eseményekké alakítja át.
Megjegyzés:
Ahhoz, hogy a változásértesítés egy kötött ügyfél és egy adatforrás közötti kötésben történjen, a kötött adatforrástípusnak implementálnia kell az INotifyPropertyChanged interfészt (előnyben részesített), vagy megadhatja a kötött típushoz tartozó PropertyName
Changedeseményeket, de nem szabad mindkettőt elvégeznie.
Interfészek az összetevők készítői által történő implementáláshoz
A következő interfészeket a Windows Forms adatkötési motorja használja:
IBindableComponent felület
Az interfészt megvalósító osztály egy nem vezérlő összetevő, amely támogatja az adatkötést. Ez az osztály az összetevő adatkötéseit és kötési környezetét adja vissza a felület DataBindings és BindingContext tulajdonságain keresztül.
Megjegyzés:
Ha az összetevő öröklődik Control, nem kell implementálnia a IBindableComponent felületet.
ICurrencyManagerProvider felület
A ICurrencyManagerProvider interfészt megvalósító osztály olyan összetevő, amely saját CurrencyManager biztosít az adott összetevőhöz társított kötések kezeléséhez. Az egyéni
CurrencyManagerelérését a CurrencyManager tulajdonság biztosítja.Megjegyzés:
Egy osztály, amely a Control-tól örököl, automatikusan kezeli a kötéseket a BindingContext tulajdonságán keresztül, így azok az esetek, amikor szükség van a ICurrencyManagerProvider implementálására, meglehetősen ritkák.
A Windows Forms által támogatott adatforrások
Az alkalmazásokban hagyományosan az adatkötést használták az adatbázisokban tárolt adatok előnyeinek kihasználására. A Windows Forms adatkötéssel más struktúrákban , például tömbökben és gyűjteményekben lévő adatbázisokból és adatokból származó adatokat érhet el, amíg bizonyos minimális követelmények teljesülnek.
A kötéshez kötődő struktúrák
A Windows Formsban sokféle struktúrához csatlakozhat, az egyszerű objektumoktól (egyszerű kötéstől) az összetett listákig, például ADO.NET adattáblákhoz (összetett kötés). Egyszerű kötés esetén a Windows Forms támogatja az egyszerű objektum nyilvános tulajdonságaihoz való kötést. A Windows Forms listaalapú kötése általában megköveteli, hogy az objektum támogatja az IList interfészt vagy a IListSource felületet. Emellett, ha egy BindingSource összetevőn keresztül köti össze a kötést, az illesztőt támogató IEnumerable objektumhoz is csatlakozhat.
Az alábbi lista a Windows Formsban összekapcsolható struktúrákat mutatja be.
-
A BindingSource a Leggyakoribb Windows Forms-adatforrás, amely proxyként működik az adatforrások és a Windows Forms-vezérlők között. Az általános
BindingSourcehasználati minta az, hogy a vezérlőket aBindingSourceköti, és aBindingSourceaz adatforráshoz (például egy ADO.NET adattáblához vagy üzleti objektumhoz) köti. ABindingSourceolyan szolgáltatásokat biztosít, amelyek lehetővé teszik és javítják az adatkötések támogatását. Például a Windows Forms listaalapú vezérlői, például az DataGridViewComboBox adatforrásokhoz való IEnumerable kötést közvetlenül nem támogatják, de ezt a forgatókönyvet úgy engedélyezheti, hogy egyBindingSource. Ebben az esetben aBindingSourceátalakítja az adatforrást egy IList. Egyszerű objektumok
A Windows Forms támogatja a típust használó objektumpéldány nyilvános tulajdonságaihoz tartozó adatkötés-vezérlési Binding tulajdonságokat. A Windows Forms emellett támogatja a kötéslista-alapú vezérlőket is, például ListControl egy objektumpéldányhoz BindingSource való használatát.
Tömb vagy gyűjtemény
Adatforrásként való működéshez egy listának implementálnia kell a IList felületet; Ilyen például egy tömb, amely a Array osztály egy példánya. További információ a tömbökről: Útmutató: Objektumtömb létrehozása (Visual Basic).
Általában BindingList<T> kell használnia, amikor objektumlistákat hoz létre az adatkötéshez.
BindingLista IBindingList felület általános verziója. AIBindingListinterfész a kétirányú adatkötéshez szükséges tulajdonságok, metódusok és események hozzáadásával kibővíti a IList felületet.-
A Windows Forms-vezérlők olyan adatforrásokhoz köthetők, amelyek csak akkor támogatják az IEnumerable interfészt, ha egy BindingSource összetevőn keresztül vannak kötve.
ADO.NET adatobjektumok
ADO.NET számos adatstruktúrát biztosít, amelyekhez kötésre alkalmas. Mindegyik kifinomultsága és összetettsége eltérő.
-
A DataColumn alapvető építőeleme a DataTable-nak, mivel több oszlop alkot egy táblát. Minden
DataColumnrendelkezik egy DataType tulajdonsággal, amely meghatározza az oszlopban tárolt adat típusát (például egy autókat leíró táblázatban szereplő autók gyártmányát). Egy vezérlőt (például egy TextBox vezérlőelem Text tulajdonságát) egyszerűen köthet egy adattábla oszlopához. -
A DataTable egy táblázat ábrázolása sorokkal és oszlopokkal a ADO.NET. Az adattáblák két gyűjteményt tartalmaznak: DataColumn, amely egy adott táblában lévő adatoszlopokat jelöli (amelyek végső soron meghatározzák az adott táblába bevihető adattípusokat), és DataRow, amelyek egy adott táblában lévő adatsorokat jelölik. Egy vezérlőt összetetten köthet az adattáblákban található információkhoz (például a DataGridView vezérlőelemet adattáblához kötheti). Ha azonban egy
DataTabletáblához köt, akkor a tábla alapértelmezett nézetéhez köt. -
A DataView egyetlen, szűrhető vagy rendezhető adattábla testreszabott nézete. Az adatnézet az összetett kötött vezérlők által használt adatok "pillanatképe". Az adatnézeten belüli adatokhoz egyszerű kötést vagy összetett kötést is végezhet, de vegye figyelembe, hogy az adatok rögzített "képéhez" köti az adatokat, nem pedig egy tiszta, frissített adatforráshoz.
-
A DataSet az adatbázisokban lévő adatok tábláinak, kapcsolatainak és korlátainak gyűjteménye. Az adathalmaz adataihoz egyszerű vagy összetett kötést is alkalmazhat, de vegye figyelembe, hogy az DataViewManager alapértelmezett
DataSetértékhez kötést hoz létre (lásd a következő listajelet). -
A DataViewManager a teljes DataSettestre szabott nézete, amely hasonló a DataView-höz, de a kapcsolatokkal együtt. Egy DataViewSettings gyűjteményben beállíthatja az alapértelmezett szűrőket és rendezési beállításokat minden olyan nézethez, amelyet a
DataViewManageregy adott táblához használ.
-
Adatkötések típusai
A Windows Forms kétféle adatkötést használhat ki: egyszerű kötést és összetett kötést. Mindegyik különböző előnyöket kínál.
| Adatkötés típusa | Leírás |
|---|---|
| Egyszerű adatkötés | A vezérlőelemek egyetlen adatelemhez, például egy adathalmaztábla oszlopában lévő értékhez való kötés képessége. Az egyszerű adatkötés az olyan vezérlőkre jellemző kötéstípus, mint például egy TextBox vezérlő vagy Label vezérlő, amelyek általában csak egyetlen értéket jelenítenek meg. A vezérlőelemek bármely tulajdonsága egy adatbázis mezőihez köthető. A Visual Studióban széles körben támogatott ez a funkció. További információ: Navigálás az adatok között és egyszerű kötésű vezérlő létrehozása (Windows Forms .NET) |
| Összetett adatkötés | Egy vezérlőelem több adatelemhez, általában egynél több rekordhoz is kapcsolódhat egy adatbázisban. Az összetett kötést listaalapú kötésnek is nevezik. Az összetett kötést támogató vezérlők például a DataGridView, a ListBoxés a ComboBox vezérlők. Az összetett adatkötésre példa: Útmutató: Windows Forms Kombinált lista vagy Listamező vezérlőelem kötése az adatokhoz. |
Kötés forrásösszetevője
Az adatkötés egyszerűsítése érdekében a Windows Forms lehetővé teszi az adatforrások BindingSource összetevőhöz való kötését, majd a vezérlők BindingSourcekötését. A BindingSource egyszerű vagy összetett kötési forgatókönyvekben is használhatja. Mindkét esetben a BindingSource közvetítőként működik az adatforrás és a változásértesítési pénznemkezelést és egyéb szolgáltatásokat biztosító kötött vezérlők között.
Adatkötést alkalmazó gyakori forgatókönyvek
Szinte minden kereskedelmi alkalmazás az egyik vagy másik típusú adatforrásból beolvasott információkat használja, általában adatkötéssel. Az alábbi lista néhány olyan leggyakoribb forgatókönyvet mutat be, amelyek adatkötést használnak az adatmegjelenítás és -kezelés módszereként.
| Forgatókönyv | Leírás |
|---|---|
| Jelentéskészítés | A jelentések rugalmas módot biztosítanak az adatok nyomtatott dokumentumban való megjelenítésére és összegzésére. Gyakori, hogy olyan jelentést hozunk létre, amely egy adatforrás kiválasztott tartalmát nyomtatja ki a képernyőn vagy a nyomtatón. A gyakori jelentések közé tartoznak a listák, a számlák és az összegzések. Az elemek listaoszlopokba vannak formázva, az alelemek pedig az egyes listaelemek alá vannak rendezve, de válassza ki azt az elrendezést, amely leginkább megfelel az adatoknak. |
| Adatbevitel | A nagy mennyiségű kapcsolódó adat megadásának vagy a felhasználók információkérésének gyakori módja egy adatbeviteli űrlap. A felhasználók szövegmezők, választógombok, legördülő listák és jelölőnégyzetek használatával adhatnak meg információkat, vagy választhatnak választási lehetőségeket. A rendszer ezután egy adatbázisban küldi el és tárolja az adatokat, amelynek struktúrája a megadott információkon alapul. |
| Fő/részlet kapcsolat | A fő-/részletes alkalmazás egy formátum a kapcsolódó adatok megvizsgálása érdekében. A klasszikus üzleti példában két adattábla kapcsolódik egymáshoz, egy "Vevők" tábla és egy "Rendelések" tábla, amelyek között kapcsolat áll fenn az ügyfelek és a hozzájuk tartozó rendelések között. További információ a fő/részletalkalmazás két Windows Forms-vezérlővel DataGridView való létrehozásáról : Mester-/részletű űrlap létrehozása két Windows Forms DataGridView vezérlővel. |
| Keresési táblázat | Egy másik gyakori adatbemutatási/kezelési forgatókönyv a táblakeresés. A nagyobb adatmegjelenítés részeként gyakran ComboBox vezérlőt használnak az adatok megjelenítésére és kezelésére. A kulcs az, hogy a ComboBox vezérlőelemben megjelenített adatok eltérnek az adatbázisba írt adatoktól. Ha például ComboBox vezérlővel rendelkezik, amely megjeleníti az élelmiszerboltból elérhető termékeket, valószínűleg látni szeretné a termékek nevét (kenyér, tej, tojás). Az adatbázison belüli információlekérés megkönnyítése és az adatbázis normalizálása érdekében azonban az adott rendelés egyes elemeinek adatait valószínűleg elemszámként (#501, #603 stb.) tárolná. Így implicit kapcsolat van az űrlap vezérlőelemében található ComboBox élelmiszerbolt "felhasználóbarát neve" és a rendelésben szereplő kapcsolódó cikkszám között. Ez a táblakeresés lényege. További információ: Útmutató: Keresési tábla létrehozása a Windows Forms BindingSource összetevővel. |
Lásd még
.NET Desktop feedback