Negeer bovenstaande post maar ...
Ik heb de afgelopen dagen zitten verder zoeken, applicatie moeten aanpassen, etc ... dus de situatie is ondertussen reeds gewijzigd, maar toch zit ik nog met enkele major problemen:
Hier is een vereenvoudigde voorstelling van de huidige applicatie (deze keer met orders/klanten). Op DB niveau heb ik een tabel Klanten en een tabel Orders. Op form1 wil ik een overzicht van alle orders in een datagrid. Op form2 zet ik dan de klantgegevens gekoppeld aan textboxen zodat ik deze kan wijzigen. Op form3 staan terug alle ordergegevens, maar deze keer ook gekoppeld aan textboxen, daarnaast staat er ook een combobox gevuld met alle klanten zodat ik kan opgeven welke klant bij dit order hoort.
Als ik nu op form2 een klant zijn gegevens wijzig, dan zou het logisch zijn dat deze wijzigingen daarna ook voorkomen in de combobox klanten op het andere form, form3. Dit kan ik verwezenlijken door ofwel, telkens als ik form3 open/selecteer, alle klanten opnieuw uit de db te halen, wat slecht is. Ofwel kies ik ervoor om te werken met een soort cache binnen de winforms applicatie. Als ik op form2 een klant wijzig, dat de wijzigingen doorgevoerd worden in de cache - een dataset in feite - zodanig dat als form3 geladen wordt, dat de wijzigingen ook hier gebeurd zijn, omdat dit form gebaseerd is op dezelfde cache.
Nu tot hiertoe nog niet echt een probleem. Wijzig ik iets in form2, dan update ik de cache (alsook de DB natuurlijk) en ga ik naar form3 dan zie ik daar de wijzigingen.
Maar dan over naar form1, de datagrid met orders. Wat ik wil is het volgende: een lijst van alle orders samen met een kolom KLANTNAAM. De cache - dataset - bevat dus een datatable orders, alsook een datatable klanten, met een relatie tussen beide tables.
Als ik als DataSource voor de datagrid de ganse DataSet (cache) zet, dan kan ik wel aan de klantnaam komen, maar dan staat die onder de + in een klantrij als childrecord, dus niet als extra kolom bij de orderrij.
Als ik als DataSource voor de datagrid een dataview neem, die gebaseerd is op de datatable orders, dan kan ik de klantnaam niet tonen, aangezien een dataview op één datatable is gebaseerd.
Nu is het aanmaken van een nieuwe datatable met alle attributen van orders, alsook een extra kolom klantnaam ook niet direct een optie - denk ik - want dan gaat mijn cache verhaal niet meer op. Als ik een nieuwe datatable aanmaak, dan kan ik perfect de klantnaam bij het order afbeelden, maar eens op form2 bv. de klantnaam wijzigt (lees, dataset/cache wordt gewijzigd), dan wijzigt form1 niet, aangezien deze terug over een afzonderlijke datatable beschikt ...
Ik hoop dat mijn probleem wat duidelijk is. Enerzijds voel ik me genoodzaakt om de data ergens globaal bij te houden in een dataset/datatables zodat ik alle forms hierop kan baseren, en een wijziging hierin ook zorgt voor het wijzigen van andere forms. Dit gebeurt via een dataview op een datatable uit de cache.
Anderzijds ben ik beperkt door het gebruik van dataviews, aangezien deze op een datatable zijn gebaseerd en ik in feite een extra "lookup" kolom wil toevoegen aan een form. Het evt. bijhouden van die extra kolom in de datatable is ook geen optie. (ivm duplicatie, updates, datatable/cache is dan afhankelijk van de voorstelling die ik wens, ...)
Ik heb de applicatie al laten werken met één globale dataset, en eens met een "lookup" kolom, maar de combinatie van beide is me tot vandaag nog niet gelukt. Bestaat hiervoor een oplossing, of is dit een beperking die niet te omzeilen valt, of moet ik mijn applicatie drastich herstructureren om toch tot een oplossing te komen?
[
Voor 7% gewijzigd door
Verwijderd op 11-05-2003 00:06
]