GridView wird nicht ordnungsgemäß nach Postback erneut gebunden

7

Ich habe eine GridView mit einer DataSourceID, die auf eine ObjectDataSource verweist. Die ObjectDataSource verweist auf eine Methode, die ein LINQ IQueryable mithilfe der Eigenschaften TypeName, SelectMethod und SelectCountMethod des ObjectDataSource-Steuerelements zurückgibt. Was passiert, ist, dass die Daten ordnungsgemäß im Voraus geladen werden. Wenn ich die Postsendungen jedoch aus dem GridView entferne und versuche, mit dem expliziten GridView.DataBind () zu binden, funktioniert Postback nicht. Ich weiß, dass LINQ die richtige rowcount und so zurückgibt, da ich die countmethod aufgerufen habe und die richtige Anzahl der Zeilen zurückgibt. Hier ist ein kurzes Beispiel:

%Vor%

Ich habe versucht, eine Schaltfläche hinzuzufügen und das TestGridView.DataBind () hinzuzufügen; Methode dazu. Ich habe versucht, es zum Page_PreRender-Ereignis hinzuzufügen. Egal, was ich versuche, es funktioniert nicht.

Wie unten vorgeschlagen, habe ich versucht, es auch auf Page_Load zu verschieben. Hier ist ein grobes Beispiel für meinen Code:

%Vor%     
Jason N. Gaylord 18.11.2009, 21:49
quelle

6 Antworten

0

Nachdem ich den Code ein wenig genauer betrachtet hatte, stolperte ich über Seiteneigenschaftswerte, die in ViewState gespeichert waren. Sobald ich es in Session geändert habe, funktionieren sie.

    
Jason N. Gaylord 20.11.2009, 16:44
quelle
13

Gridviews werden beim Postback nicht neu gebunden, ihre Zeilen werden aus dem Viewstatus zurückgezogen. Durch das Zurücksetzen der DatasourceID der Gridview auf die ID der Objektdatenquelle beim Laden der Seite (oder init?) Wird die Gridview neu gepoolt.

    
Sprintstar 18.08.2010 14:34
quelle
3

Dumm Idee, aber haben Sie das Seitenladeereignis mit dem if(!Page.IsPostBack) überprüft?

Von ASP.NET Page Framework Übersicht :

  

Page_Load: Während dieses Ereignisses können Sie eine Reihe von Aktionen ausführen, um entweder Ihre ASP.NET-Seite zum ersten Mal zu erstellen oder auf clientseitige Ereignisse zu reagieren, die sich aus einem Beitrag ergeben. Der Seiten- und Steuerungsansichtszustand wurde vor diesem Ereignis wiederhergestellt. Überprüfen Sie mithilfe der Seiteneigenschaft IsPostBack , ob die Seite zum ersten Mal verarbeitet wird. Wenn es das erste Mal ist, führen Sie Datenbindung durch. Lesen und aktualisieren Sie auch die Steuerelementeigenschaften.

Wo als

  

Page_PreRender: Das PreRender-Ereignis wird ausgelöst, unmittelbar bevor der Ansichtszustand gespeichert und die Steuerelemente gerendert werden. Sie können dieses Ereignis verwenden, um letzte Änderungen an Ihren Steuerelementen vorzunehmen.

Tatsächlich

  

Da das Seitenframework ein statusloses und getrenntes Modell ist, treten jedes Mal, wenn ein Client eine ASPX-Seite anfordert, während der Seitenverarbeitung viele Dinge auf ...

In der Tat könnten Sie Ihre Prüfung vor dem Setzen des Viewstate durchführen, anstatt nach der Wiederherstellung des Viewstates. Der häufigste Ort, an dem nach if(!Page.IsPostBack) gesucht wird, befindet sich normalerweise im Page_Load-Ereignis.

    
Chris 18.11.2009 22:06
quelle
2

Ihr Beispiel zeigt

%Vor%

Aber meintest du wirklich

? %Vor%

(und ist das das Problem?)

    
Jeff Widmer 19.11.2009 21:15
quelle
2

Ich hatte ein ähnliches Problem mit der dynamischen Bindung einer TreeView an eine XmlDataSource, die die XML-Quelle bei jedem Postback änderte. Setzen Sie EnableCache auf "false". Hast du das versucht? (Beachten Sie, dass das Linq2sql-Objekt bereits zwischengespeichert wird, wenn Ihr IQueryable ein Linq2sql-Objekt verwendet, dh)

%Vor%

Wenn das nicht funktioniert, versuchen Sie es mit dem oben genannten:

%Vor%     
Jim Schubert 20.11.2009 14:40
quelle
0

Ich hatte eine ähnliche Situation, in der die aktualisierten Werte einer Zeile nicht angezeigt wurden, egal wie ich nach der Aktualisierung versucht habe, eine Datenbank zu erstellen.

Das GridView wurde an ein ObjectDataSource gebunden, und das Problem trat auf, nachdem ich sein Hintergrundobjekt von einem DataSet auf ein Entity Framework query

umgestellt hatte

Die Aktivierung von ViewState für GridView hat mir den folgenden Trick eingebracht:

%Vor%     
Torben Frandsen 12.09.2017 09:01
quelle