Apartman – kezelő rendszer implementálása 2 Írta: Kátai Kornél Bálint, 2007 Mail: (A nyugalom megzavarására alkalmas kép- és szöveganyagot tartalmaz, így megtekintése csak saját felelősségre történhet!) 1
2
Táblák szűrése Táblák editálása Hibakezelés & validáció 3
FilterControl – adatforrás JoinedTableCtrl – adatmegjelenítés TableDisplayCtrl MainForm - példányosítás 4 FILTERCONTROL JOINEDTABLECTRL
A már implementált JoinedTable osztály példánya lesz az adatforrás Ez azt is jelenti, hogy a példánynak mindig tükröznie kell a megjelenített állapotot! 5
Kapcsolat a FilterControl BindingSource objektumán keresztül 6 BindingSource Specifikus osztályok
Adatkapcsolatok beállítása TableDisplayCtrl inicializálása (lásd: előző ea) Külső adatforrások beállítása (lásd: előző ea) Megjelenítés és viselkedés megadása 7
Négy módszer Hagyományos értékadás Kifejezés feldolgozása Compute Adatkötés táblához Adatkötés egyéb struktúrához 8 Sum, Avg, Min, Max, Count, StDev, Var
Select metódus -> DataRow[] RowState a row mindig referencia -> szülő tábla Clone metódus Használat után Dispose! 9
Kifejezéssel automatizált szűrés Compute, Select metódusok segítségével Nem minden esetben használható Magas szintű Implementáltuk a helyben szűrő változatát Manuális szűrés Iteráció a tábla sorain Szükséges sorok kinyerése / szükségtelenek eldobása Alacsonyabb szintű 10
A szűrés kifejezésen keresztül történik A kifejezés az SQL ‘WHERE’ kulcsszó után várt kifejezésével egyező szintaxisú Hibás szintaxis -> EXCEPTION 11
Két megközelítés: Sorok kigyűjtése RowState! Sorok eltávolítása Iteráció alanya módosul -> foreach Ajánlott: for ciklus visszafelé! 12
Cél: prioritási sorrend felállítása Konkrét feladat 13 Rendezési direktívák
A már ismert Select metódussal oszlopok szerint rendezhető a tábla. Eljárás lépései: Ideiglenes oszlop felvétele a rendezendő táblához Sorok prioritásának meghatározása (pontozás) Rendezés végrehajtása Ideiglenes oszlop eltávolítása 14
A JoinedTable Filter metódusa a rendezést is támogatja Eljárás lépései: Ideiglenes oszlop felvétele a rendezendő táblához Sorok prioritásának meghatározása (pontozás) Rendezés végrehajtása Ideiglenes oszlop eltávolítása 15
TableCtrlBase Absztrakt ősosztály TableDisplayCtrl –ből származik Típusos Editáló kontrolok TableCtrlBase –ből származtatott osztályok Végső absztrakciós szint 16
Absztrakt metódusok Az általános viselkedés leírásához szükséges specifikus eljárások A származtatott osztályok csak ezek implementálása után példányosíthatóak Alternatív lehetőség: INTERFACE -ek 17
Adatforrás property ‘set’ metódusának túlterhelése Avagy hogyan inicializáljuk a forrást? Lehetett volna absztrakt metódussal, vagy eseménnyel támogatni! A TableDisplayCtrl inicializációja a szokásos módon Absztrakt metódusok implementálása 18
Az editor tábláknál is használhatjuk a korábban tárgyalt adatkötéseket, a display- és a valuemember tagokat 19 Inicializáció Külső adatforrások
Dátum típusú mezők editálása Nem támogatja a keretrendszer Saját editor mező implemetálása TableDisplayCtrl 20
Az appartman tábla nem rendelkezik reprezentáló mezővel (név) Hivatkozáskor nincs mit megjeleníteni! Előszűrés: 21 Appartmanok (Joined Table) Árak
Szükséges: PriceTableCtrl PriceHandlerCtrl UserControl, megjeleníti a PriceTableCtrl –t és a JoinedTableCtrl -t 22 JoinedTableCtrl PriceTableCtrl SelectedRowChanged esemény Előszűrés ID
PriceHandlerCtrl SelectedRowChanged esemény PriceTableCtrl Nem mutatjuk az appartman azonosítóját A meglévő bejegyzéseket szűrjük az aktuális appartman alapján Az új bejegyzéseknél beállítjuk a megfelelő hozzárendelést 23 Nem megjelenítendő mező
Szükséges, amikor Nem minden táblaállapot megengedett A beviteli mező megenged érvénytelen értéket is A sor rendelkezik érvényességi feltételekkel Tipikus példa: AllowNull A tábla rendelkezik érvényességi feltételekkel Tipikus példa: Unique mező Előfordulnak kapcsolódási problémák 24
A Validate() metóduson keresztül Ellenőrzi a mezők, a sorok és a tábla konzisztenciáját Legfontosabb eszköz: Validating események Saját szemantikai ellenőrzés hajtható végre Az esetleges inkonzisztencia kezelhető 25 Validate Validating CellValidating CellValidated RowValidating RowValidated Validated Eseménykezelők
Mikor kell ellenőriznünk a konzisztenciát? Mentéskor Törléskor Függések! Mező editálás után Hiba esetén Automatikus, túlterhelhető 26
TableCtrlBase ősosztályban NavigatorSaveItemClicked esemény 27 hamis, ha a validáció sikertelen véglegesíti a módosításokat kapcsolat hiba esetén hibaüzenet sikertelen validáció -> igény szerint módosítások visszavonása
TableCtrlBase ősosztályban NavigatorDeleteItemClicked esemény 28 van –e függése a törlendő sornak? esemény lekezelve -> nincs törlés
TableCtrlBase ősosztályban Adatforrás hiba „Az adatforrás-réteg inkonzisztenciája” Automatikusan kezelt, de túlterhelhető Mező validálás Ha egy mező editálását befejeztük 29 esemény lekezelve -> elutasítjuk az alapértelmezett hibaüzenetet és a validáláson keresztül jelezzük a hibát
Sorok konzisztenciáját ellenőrizzük Tiltott állapot (az alapértelmezetteken felül): ha a megadott intervallum értelmetlen 30 ErrorText: a validáció során tapasztalt hiba a validáció sikertelen A mezőkhöz is létezik ErrorText!
Kapcsolatépítés Kapcsolt táblák megjelenítése Adatkötések használata Táblák szűrése Táblák editálása Hibakezelés & Validáció 31
32 Köszönöm a figyelmet!