Ik heb een DataGrid aan een Dynamisch opgebouwd UserControl. Dus ik laad het UserControl afhankelijk van de keuze van de gebruiker.
Nu heb ik het probleem dat als ik een item uit de DataGrid wil editten, dat de EditItemIndex op het moment dat er op Update wordt geklikt niet wordt teruggezet naar de waarde van het item dat ge-edit wordt, en dat het UpdateCommand niet wordt uitgevoerd.
Ik heb een tijdje lopen debuggen, en ik heb de volgende 2 schema's naast elkaar gezet.
Bij een pagina waar de UserControl niet dynamisch is, als je op Update klikt van rij 0:
Als ik dit nu doe bij een pagina waarin de UserControl in de PageLoad van de .aspx wordt geladen:
Hierbij wordt dus de EditItemIndex niet ingesteld, omdat de ViewState volgens mij al tussen de Init en de PageLoad van de .aspx pagina wordt teruggezet, en daar bestaat de UserControl nog niet.
Laadt ik nu de UserControl in de Init, gebeurd het volgende:
Nu is de volgorde nagenoeg gelijk aan die van waarin het wel werkt (ik initialiseer de UserControl voordat ik de Init code van de .aspx pagina uitvoer) maar nogsteeds wordt de ViewState niet teruggezet.
De workaround die ik ervoor bedacht heb is de volgende: Het laden van de UserControl gebeurd in de PageLoad van de .aspx, en tijdens het EditCommand van de DataGrid set ik in de Sessie de EditItemIndex. Tijdens de PageLoad stel ik die weer in. Nu werkt het wel, maar ik kan me niet voorstellen dat dit de beste oplossing is.
Nu heb ik het probleem dat als ik een item uit de DataGrid wil editten, dat de EditItemIndex op het moment dat er op Update wordt geklikt niet wordt teruggezet naar de waarde van het item dat ge-edit wordt, en dat het UpdateCommand niet wordt uitgevoerd.
Ik heb een tijdje lopen debuggen, en ik heb de volgende 2 schema's naast elkaar gezet.
Bij een pagina waar de UserControl niet dynamisch is, als je op Update klikt van rij 0:
code:
1
2
3
4
5
| 1. Init van de .ascx (EditItemIndex: -1) 2. Init van de .aspx (EditItemIndex: -1) 3. PageLoad .aspx (EditItemIndex: 0) 4. PageLoad .aspx (EditItemIndex: 0) 5. UpdateComand .ascx (EditItemIndex: 0) |
Als ik dit nu doe bij een pagina waarin de UserControl in de PageLoad van de .aspx wordt geladen:
code:
1
2
3
4
| 1. Init van de .aspx (EditItemIndex: null)
2. PageLoad .aspx (EditItemIndex: null)
3. Init van de .ascx (EditItemIndex: -1) (tijdens PageLoad van .aspx)
4. PageLoad .ascx (EditItemIndex: -1) |
Hierbij wordt dus de EditItemIndex niet ingesteld, omdat de ViewState volgens mij al tussen de Init en de PageLoad van de .aspx pagina wordt teruggezet, en daar bestaat de UserControl nog niet.
Laadt ik nu de UserControl in de Init, gebeurd het volgende:
code:
1
2
3
4
| 1. Init van de .aspx (EditItemIndex: null)
2. Init van de .ascx (EditItemIndex: -1) (tijdens Init van .aspx)
3. PageLoad .aspx (EditItemIndex: -1)
4. PageLoad .ascx (EditItemIndex: -1) |
Nu is de volgorde nagenoeg gelijk aan die van waarin het wel werkt (ik initialiseer de UserControl voordat ik de Init code van de .aspx pagina uitvoer) maar nogsteeds wordt de ViewState niet teruggezet.
De workaround die ik ervoor bedacht heb is de volgende: Het laden van de UserControl gebeurd in de PageLoad van de .aspx, en tijdens het EditCommand van de DataGrid set ik in de Sessie de EditItemIndex. Tijdens de PageLoad stel ik die weer in. Nu werkt het wel, maar ik kan me niet voorstellen dat dit de beste oplossing is.