2009-04-03 22 views
1

Ich verwende eine Standart. NET 2.0 Gridview, die eine XMLDatasource verwendet, um das Grid zu füllen. Die Data-Eigenschaft der XMLDatasource wird dynamisch festgelegt, wodurch sich die Gridview basierend auf der Eingabe ändern kann.Paging-Probleme mit Standard .net 2.0 Gridview mit VB.Net

alles in Ordnung aber funktioniert Ich habe Probleme mit Paging ...

Ich habe die AllowPaging Eigenschaft auf „true“ gesetzt und stellen Sie die Pagesize-Eigenschaft auf „10“. Das GridView füllt das erste Mal gut auf und zeigt die ersten 10 Datensätze und die Anzahl der Seiten als Hyperlinks am unteren Rand an. ABER wenn ich versuche, auf eine der Seitenzahlen zu klicken, erscheint ein Meldungsfeld mit dem Hinweis "Objektreferenz nicht gesetzt zu einer Instanz eines Objekts "

irgendwelche Ideen, was ich falsch mache ?? oder muss ich etwas tun, was ich verpasst habe ??

Code wird gerade verwendet;

Gridview ...

<asp:GridView ID="GridView1" 
     Runat="server" 
     DataSourceID="XmlDataSource1" 
     AutoGenerateColumns="False" 
     AllowPaging="True" 
     style="width:100%; height:100%;" 
     EnableViewState="False"> 
<SelectedRowStyle BackColor="Red" /> 
<Columns> 
    <asp:BoundField DataField="TYPE" HeaderText="TYPE" SortExpression="TYPE" /> 
    <asp:BoundField DataField="DESCRIPTION" HeaderText="DESCRIPTION" SortExpression="DESCRIPTION" /> 
</Columns> 
</asp:GridView> 

XmlDataSource ...

<asp:XmlDataSource ID="XmlDataSource1" runat="server" TransformFile="~/XML/grid2.xslt" EnableCaching="False"> 
</asp:XmlDataSource> 

vb.net Code, der die Data-Eigenschaft des XmlDataSource setzt ...

Private Sub btnTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnTest.Click 

    XmlDataSource1.Data = _testLib.GetGridXML(_Num) 
    GridView1.DataBind() 
End Sub 

wo _testLib .GetGridXML ist eine Funktion, die eine XML-Zeichenfolge zurückgibt, die auf der übergebenen _Num basiert.

+0

Weisen Sie Ihre Daten entweder auf Page_Load jederzeit oder bei jedem sekundären Ereignis zu, d. H. Gittersortierung, Seitenindexänderung usw. (alles, was den Status des Gitters ändert). Sehen Sie meine aktualisierte Antwort ... – Ruslan

Antwort

1

Es ist schwer zu sagen, ohne den Code zu sehen ... Ich würde vermuten, dass Sie die Daten bedingt zuweisen, das heißt:

If Not IsPostBack Then 
    MyXMLDataSource.Data = "...some xml..." 
End If 

In diesem Fall wird es wieder auf Post leer sein und Sie Ihre Exception. Könnte etwas anderes sein, aber dann wieder, kein Code ...

aktualisieren

Da Sie mehr Informationen ...

hinzugefügt haben Sie müssen so etwas wie Code oben auf Page_Load haben. Da Sie es hier nicht zur Verfügung stellen, nehme ich an, Sie tun es. Wenn Sie dies nicht tun, erhalten Sie die NULL-Referenz-Ausnahme bei jeder Ladung.

In diesem Sinne weisen Sie Daten bei einigen Tasten klicken, aber nicht bei PageIndexChanging.

Sie klicken auf die Schaltfläche, die Seite lädt, Sie weisen die Daten zu, das Raster zeigt es an. Dann klicken Sie auf den nächsten Link des Rasters, die Seite wird erneut geladen, PageIndexChanging wird ausgelöst, Ihr Klickereignis nicht - wo ist dann die Zuweisung?

Von dem, was ich sehe, entweder ordnen Sie die Eigenschaft Daten auf Page_Load jedes Mal oder tun es in alle nachfolgenden Ereignisse, dh auf Seitenwechsel, auf Art usw.

Btw, Sie dies nicht tun muss DataBind aufrufen, wenn XmlDataSource deklarativ zugewiesen wird.

+0

Ich habe den aktuellen Code in der Frage verwendet – eMTeeN

+0

Vielen Dank! das macht Sinn und WORKED :) eine Sache zu erwähnen, wenn Viewstate in der Grid aktiviert ist, funktioniert es besser, wenn die Data-Eigenschaft in PreRender-Ereignis im Gegensatz zum Laden von Seiten festgelegt ist. Wenn ViewState jedoch deaktiviert ist, funktioniert es einwandfrei, wenn die Data-Eigenschaft im PageLoad-Ereignis festgelegt ist! – eMTeeN

0

Implementieren Sie das OnPageChanging Event? Normalerweise müssen Sie es implementieren und die e.NewPageIndex-Eigenschaft aus dem Event-Argument verwenden, um es in Ihrer Gridview festzulegen.

+0

Sie müssen das nicht tun, wenn die Datenquelle deklarativ zugewiesen wird, was vermutlich der Fall ist ... – Ruslan

+0

Übrigens, wenn das OnPageChanging nicht implementiert wurde, würde es einen anderen Fehler geben, der spezifisch angibt, dass es gefeuert wurde und nicht behandelt. – Ruslan

+0

Ich habe den aktuellen Code in der Frage verwendet – eMTeeN

1

Es sollte funktionieren, wenn Sie Ihre Datenbindung auf der Veranstaltung PreRender tun

Da die XML-Datenquelle dynamisch eingestellt wird, wenn Sie es auf dem Pageload alle Seitenelemente zu diesem Zeitpunkt existieren könnte nicht festgelegt.

+0

Ich habe den aktuellen Code in der Frage verwendet – eMTeeN

Verwandte Themen