

Delphi - zrušenie nastavení z "odchádzajúceho" TabSheet pri prepnutí na nový TabSheet
Na formulári mám PageControl. Ten obsahuje niekoľko TabSheet a na každom TabSheet je jeden DBGrid. V rámci aplikácie mám jeden DataSource, ktorý chcem podľa potreby priraďovať DBGridom a 2 Query. Jeden je pracovný a druhý pre zobrazenie v DBGrid. Mám takýto problém:
Pri prepnutí TabSheet potrebujem zrušiť prepojenie DBGridu, ktorý bol doteraz zobrazený, urobiť zmeny a priradiť nový DBGrid. Tejto postupnosti odpovedá TabSheet.OnExit, PageControl.OnChange a TabSheet.OnEnter. Zistil som však, že OnExit sa nikidy nevyvolá a miesto toho sa mi 2x zavolá OnChange a potom sa 1x zavolá OnEnter. Ako mám teda dosiahnuť zrušenie prepojenia DBGridu s DataSource, keď sa pri prepnutí nevyvolá OnExit?
Použij událost TPageControl.OnChange - vypukne při vlezení do ucha, TPageControl.ActivePage ukazuje na ucho, do kterého se právě vlezlo. Pro opuštění ucha použij TPageControl.OnChanging - vypukne při odchodu z ucha, TPageControl.ActivePage ukazuje na právě opouštěné ucho. Já osobně bych s mřížema nic nedělal extra. Na každém uchu bych si je nastavil podle potřeby a když uživatel překlikne na jiné ucho, nechal bych ty mříže v pozadí osudu, ať si žijou jak chtějí - obvykle nic špatného neprovedou.
Lenže, ak nastavím nový SQL príkaz, tak ak budem mať v DBGride definované názvy stĺpcov a nebude sedieť počet, tak pri zmene SQL príkazu dojde k výnimke. Teda ak sa nemýlim.
Na každý list (TTabSheet) objektu TPageControl můžeš přece nacpat mříž, jakou potřebuješ - klidně na každý list jinou a klidně svázanou s jinou tabulkou nebo jiným SQL. Tedy co list, to jiná mříž. Tím se nebudou ovlivňovat. Záleží co děláš. Někdy je žádoucí, aby se mříž na jiném listě (spojená se stejnou tabulkou/SQL) ale s jinými sloupci pohybovala stejně.
Vidíš, to nie je zlý nápad. Vzájomné posúvanie by nebolo na zahodenie.