The best thing about UDP jokes is that I don't care if you get them or not.
Even de puur HTML (even geen viewstate) oplossing. Checkboxen welke niet worden aangevinkt worden niet in de formulier post opgenomen. Normaal gesproken weet je dus niet dat iemand een vinkje heeft weggehaald. Daarom worden meestal alle koppelingen verwijderd en daarna de geselecteerde weer aangemaakt.
Echter in .NET heb je de viewstate en daarmee kun je de 'state' bewaren. Je kunt ook zelf objecten toevoegen aan de Viewstate op page niveau (page inherits van control) zoals een DataSet.
Vervolgens kun je na de postback de tabel weer uit de viewstate halen en vervolgens updaten op basis van de checkboxlist. Vervolgens kun je een DataAdapter configuren welke de gewijzigde records wegschrijft naar de database. Elke row in de datatable heeft namelijk ook een RowState en de DataAdapter zal op dat moment alleen deletes en inserts uitvoeren (uitgaand van een simpele koppeltabel).
Ook Linq To Sql heeft een aantal leuke trucjes. Maar het toverwoord voor jouw is denk ik toch wel Viewstate. Verdiep je maar eens in de viewstate.
Echter in .NET heb je de viewstate en daarmee kun je de 'state' bewaren. Je kunt ook zelf objecten toevoegen aan de Viewstate op page niveau (page inherits van control) zoals een DataSet.
code:
1
| Viewstate.Add("LinkTable", ds.Tables[0]); |
Vervolgens kun je na de postback de tabel weer uit de viewstate halen en vervolgens updaten op basis van de checkboxlist. Vervolgens kun je een DataAdapter configuren welke de gewijzigde records wegschrijft naar de database. Elke row in de datatable heeft namelijk ook een RowState en de DataAdapter zal op dat moment alleen deletes en inserts uitvoeren (uitgaand van een simpele koppeltabel).
Ook Linq To Sql heeft een aantal leuke trucjes. Maar het toverwoord voor jouw is denk ik toch wel Viewstate. Verdiep je maar eens in de viewstate.
If it isn't broken, fix it until it is..
Tnx, ik ga daar eens naar kijken.
The best thing about UDP jokes is that I don't care if you get them or not.
Door je collectie van checkboxen lopen is ook gewoon mogelijk:
C#:
1
2
3
4
5
6
7
| foreach (ListItem item in lijst.Items) { if (item.Selected) { //we hebben een vinkje } } |
Ja, maar dan weet je nog steeds niet of de selectie van een item is aangepast en moet je nog steeds per item een update naar de database doen, of eerst alle koppelingen weggooien en daarna de geselecteerde weer inserten.Razr schreef op dinsdag 25 maart 2008 @ 22:41:
Door je collectie van checkboxen lopen is ook gewoon mogelijk:
De vraag was juist of er een andere methode was. LinqToSql en de DataSet houden beide intern een state per record bij en weten dus precies wat ze moeten updaten in de database. Dat betekend dat als je niets wijzigt op het formulier, maar wel submit er geen database wijzigen plaats vinden.
If it isn't broken, fix it until it is..