Michiel van Otegem, IT Composer

Tuesday, June 14, 2005

De vele wegen die naar Rome, eehhh de database, leiden

Ik heb net een serie artikelen geschreven over ASP.NET 2.0 voor een blad dat ergens komende maand moet verschijnen. In een van de artikelen loop ik door het proces heen van het maken van een website met een database, en een beheerpagina daarvoor. Aardigheidje hierin is master-detail weergave met een GridView-control en een FormView-control, waarbij het mogelijk moet zijn om een record toe te voegen. Dit kan op meerdere manieren... bijvoorbeeld door de WHERE-clause van de DataSource-control voor de FormView gebruik te laten maken van de SelectedValue van de GridView voor de filtering, of door beide controls van dezelfde DataSource-control gebruikt te laten maken en de keuze van het detail record met het SelectedValueChanged (of dergelijk) event te regelen. Aan mij de vraag om te beantwoorden wat je mensen moet leren? Oftewel... wat is de beste methode? Het antwoord: eigenlijk allebei (niet). Beide hebben voor- en nadelen.
Het gemak van de eerste methode is geweldig, want je hebt geen code nodig... totdat je erover nadenkt wat er moet gebeuren als er nog geen records zijn, want als er geen record is om weer te geven komt de FormView-control niet in beeld, tenzij de CurrentMode op Insert staat (ipv ReadOnly of Edit). Maar... als je dat forceert zorgt onze "vriend" ViewState ervoor dat na het invoegen de FormView-control op Insert blijft staan, ook als je een record selecteert in de GridView (aaargh!). Bovendien moet je een Refresh doen om de wijziging te zien, omdat de DataSource-controls niet op elkaars wijzigingen letten. Wil je dit dus verhelpen, dan moet je ineens toch code gaan toevoegen aan vier event handlers, en daar gaat je simplisme.
Nee, dan de andere methode... wil je mensen wel belasten met de gedachte dat de DataSource-control rijen aanlevert met een index, en dat je de geselecteerde index van de GridView kunt gebruiken om de FormView naar het juiste record te laten wijzen? Het voordeel is dat beide controls tegen dezelfde DataSource-control aan praten betekent dat wijzigingen in beide ook synchroon lopen, wat wil je nog meer? Ook hier doet het probleem zich voor dat je even op moet letten als er nog geen records zijn, maar dat is eenvoudiger op te lossen dan in de andere methode. Resultaat: de complexiteit van elk van de oplossingen is min of meer gelijk, alleen de weg er naartoe is anders. Misschien moet ik mensen dus maar leren een eigen FormView-control te maken die iets slimmer is ;).

0 Comments:

Post a Comment

<< Home