Ik ben bezig met een datagrid op een Asp.net webform ( in c# maar dat is niet echt belangrijk ). Ik wil hier zelf mijn columns aan toevoegen dus ik heb AutoGenerateColumns op false gezet.
In mijn Page_Load heb ik het volgende staan
Ik creeer dus elke Request de benodigde columns. Dit wordt ook goed uitgevoerd als ik er met de debugger door heen loop. Ik doe dit elke request omdat je normaal gesproken je Control tree altijd weer op moet bouwen. Nou weet ik niet zeker of dit ook met de Columns van een datagrid moet maar als ik het alleen de eerste Request doet dan blijft het probleem ( wat ik zo even zal beschrijven ) ook.
Ik wil ook dat het datagrid gesorteerd kan worden dus ik heb AllowSorting op true staan en in mijn Page_Init heb ik het volgende staan
en heb natuurlijk ook die eventhandler aangemaakt.
Nou het probleem. De eerste Request wordt alles netjes getoond zoals ik will. De data is goed gevuld en alle Columns zijn netjes aangemaakt. Echter als ik op een van de headers druk om te sorteren dan krijg ik alleen een lege pagina te zien. In mijn Sort EventHandler heb ik alleen een nieuwe FillDataGrid() staan maar daar komt hij niet eens als ik er een breakpoint zet.
Als ik in mijn Page_Load altijd mijn FillDataGrid() uit laat voeren dan wordt het event wel netjes uitgevoerd en werkt het allemaal wel. Het is toch echter de bedoeling dat de data in de ViewState ( die staat gewoon aan )komt te staan en dat ik niet elke round trip mijn data opnieuw moet binden. Dit is namenlijk nogal zonde als ik het later in mijn request ook alweer opnieuw bind.
Ik heb het gevoel dat ik iets heel simpels over het hoofd zie of dat ik gewoon verkeerd aan het denken ben maar ik zie het op dit moment even niet. Ik hoop dat iemand ziet wat ik verkeerd doe.
ps:
Ik heb ook geprobeerd om AutoGenerateColumns op true te zetten en dan nadat de Columns gegenereerd zijn daar de properties die ik wil wijzigen te wijzigen, maar zelf in het Pre_Render event is de Columns collectie dan nog leeg dus dan kan ik er ook niks aan wijzigen.
In mijn Page_Load heb ik het volgende staan
C#:
1
2
3
| CreateColumns(); if( !IsPostBack ) FillDataGrid(); |
Ik creeer dus elke Request de benodigde columns. Dit wordt ook goed uitgevoerd als ik er met de debugger door heen loop. Ik doe dit elke request omdat je normaal gesproken je Control tree altijd weer op moet bouwen. Nou weet ik niet zeker of dit ook met de Columns van een datagrid moet maar als ik het alleen de eerste Request doet dan blijft het probleem ( wat ik zo even zal beschrijven ) ook.
Ik wil ook dat het datagrid gesorteerd kan worden dus ik heb AllowSorting op true staan en in mijn Page_Init heb ik het volgende staan
C#:
1
| myDataGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.myDataGrid_SortCommand); |
en heb natuurlijk ook die eventhandler aangemaakt.
Nou het probleem. De eerste Request wordt alles netjes getoond zoals ik will. De data is goed gevuld en alle Columns zijn netjes aangemaakt. Echter als ik op een van de headers druk om te sorteren dan krijg ik alleen een lege pagina te zien. In mijn Sort EventHandler heb ik alleen een nieuwe FillDataGrid() staan maar daar komt hij niet eens als ik er een breakpoint zet.
Als ik in mijn Page_Load altijd mijn FillDataGrid() uit laat voeren dan wordt het event wel netjes uitgevoerd en werkt het allemaal wel. Het is toch echter de bedoeling dat de data in de ViewState ( die staat gewoon aan )komt te staan en dat ik niet elke round trip mijn data opnieuw moet binden. Dit is namenlijk nogal zonde als ik het later in mijn request ook alweer opnieuw bind.
Ik heb het gevoel dat ik iets heel simpels over het hoofd zie of dat ik gewoon verkeerd aan het denken ben maar ik zie het op dit moment even niet. Ik hoop dat iemand ziet wat ik verkeerd doe.
ps:
Ik heb ook geprobeerd om AutoGenerateColumns op true te zetten en dan nadat de Columns gegenereerd zijn daar de properties die ik wil wijzigen te wijzigen, maar zelf in het Pre_Render event is de Columns collectie dan nog leeg dus dan kan ik er ook niks aan wijzigen.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”