Forum: PC-Programmierung [C#]Problem mit Footerrow und Databind()


von asdf (Gast)


Lesenswert?

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?

von asdf (Gast)


Lesenswert?

nachtrag: TextBox ist kein problem weil ja kein PreRender feuert ;)

ich will keine nervigen globalen variablen oder so einfuehren sondern 
einfach nur verhindern dass DataBind() mein SelectedDate loescht.

von asdf (Gast)


Lesenswert?

hat sich erledigt. es gibt SelectedDate und VisibleDate.

mit einer direkten zuweisung funktioniert es:
1
((Calendar)GridToPopulate.FooterRow.FindControl("X")).SelectedDate = TempDate;
2
            ((Calendar)GridToPopulate.FooterRow.FindControl("X")).VisibleDate = TempDate;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.