moin,
ich habe ein GridView, das per LINQ an eine SQL tabelle gebunden ist.
im PreRender event mache ich ein DataBind(), damit immer die aktuellsten
daten im GridView drinstehen.
in der Fusszeile habe ich unter anderem einen kalender und einen
"create" button, der einen neuen eintrag auf dem sql server erstellt.
das problem ist nun: wenn ich ein datum in der fusszeile auswaehle,
feuert "PreRender" und deselektiert mir das datum gleich wieder (eben
wegen DataBind()).
wenn ich DataBind() rausnehme, stehen nicht immer die aktuellsten daten
drin, insbesondere nicht die, die mit hilfe der fusszeile erstellt
wurden, was nicht gerade zur benutzerfreundlichkeit beitraegt.
das erstellen an sich funktioniert.
1 | protected void GridViewX_PreRender(object sender, EventArgs e)
|
2 | {
|
3 | X.PopulateGridView(GridViewX, X, X);
|
4 |
|
5 | [...]
|
6 | }
|
7 | public static void PopulateGridView(GridView GridToPopulate, X, X)
|
8 | {
|
9 | //temporary save the calendar, because the selected date is lost after databind
|
10 | Calendar TempCalendarNew = new Calendar();
|
11 | Calendar TempCalendarEdit = new Calendar();
|
12 | TempCalendarNew = (Calendar)GridToPopulate.FooterRow.FindControl("X");
|
13 | TempCalendarEdit = (Calendar)GridToPopulate.FooterRow.FindControl("X");
|
14 |
|
15 | GridToPopulate.DataBind();
|
16 |
|
17 | //now write back the calendar data
|
18 | Calendar CalenderEdit = (Calendar)GridToPopulate.FooterRow.FindControl("X");
|
19 | Calendar CalendarNew = (Calendar)GridToPopulate.FooterRow.FindControl("X");
|
20 | CalendarNew = TempCalendarNew;
|
21 | CalenderEdit = TempCalendarEdit;
|
22 |
|
23 | [...]
|
24 | }
|
diese loesung funktioniert nicht. ich muss ehrlich sein: wie das mit dem
referenzieren bei C# funktioniert habe ich nicht ganz verstanden.
insbesondere macht FindControl() wohl nur eine kopie des zu findenen
elements. daher funktioniert es denke ich nicht.
merkwuerdigerweise habe ich das problem mit TextBox nicht.
vorschlaege?