Frage

Ich habe eine Gridview, das seine DataSourceID Eigenschaft auf ein benutzerdefiniertes Object Objekt festgelegt. Wenn AllowPaging auf True gesetzt ist, verschwindet die Gridview nach einer Postbacks. Wenn ich AllowPaging auf False festgelegt, es ist in Ordnung. Kann jemand etwas Licht in diese für mich vergossen? :)

Edit: Die andere Sache, ich bin verwirrt über die ich dachte, wenn Sie setzen die DataSourceID , dass die Rasterdaten von der Datenquelle erhalten würde, wenn er es brauchte. Wenn das Raster verschwindet, weil es nicht ist, die Daten zu halten, warum nicht der gridview die Daten bekommen sie von der Datenquelle braucht?

War es hilfreich?

Lösung

Es ist möglich, dass nach dem Postback der Datenquelle auftritt, wird nicht eingehalten wird oder wieder aufgefüllt und es gibt keine Elemente das Gitter zu füllen. Gehen Sie mit Zustand korrekt für das Datasource-Objekt (Rebinding / halten die Quelle am Leben), wenn Paging aktiviert ist?

Das mag wie eine vage Antwort klingen, aber ohne ein Beispiel dafür, wie die Quelle der Daten wird immer es ist irgendwie schwer zu diagnostizieren, warum die Artikel verschwunden sein würde.

Edit:
Die Methode, die ich darüber nachdachte, war für Rückruf Paging / Sortierung. Allerdings habe ich einige Informationen finden ont er ODS & Paging .. stellen Sie sicher, Sie festgelegt haben die folgenden:

  1. Gridview: AllowPaging und natürlich müssen Sie Seitengröße einzustellen.
  2. Object: EnablePaging, auch müssen Sie die festlegen:
    • MaximumRowsParameterName = "maxRows"
    • StartRowIndexParameterName = "StartRowIndex"
    • Select = "Record"

Ich glaube, nur die drei Unterpunkte von Punkt 2 einstellen müssen, wenn Sie Paging-Größe usw. manuell zu handhaben wollen.

Dann können Sie mehr oben auf dieser hier lesen .

Andere Tipps

Um mehr von @ adam0101 Antwort zu beantworten, was Ich denke er unter „... Es stellt sich meine benutzerdefinierte Datenquelle heraus zurückkehrt Null für die Rekordzahl .“ , ist, dass Sie benötigen, um " re-attach ", um die Datenquelle zu der gridview. ASP.net automatisch weiß, dass du retriving Rekord-'n‘, wobei‚n‘die nächste erste Zeile der nächsten Seite. Diese Lösung ist für Fälle, in denen Sie nicht wollen, asp.net auf , damit Daten automatisch verarbeiten in Ihrem gridview, vielleicht aufgrund wollen Daten nach einem anderen Ereignisse (eine LOAD DATA-Taste zum Beispiel) laden und nicht, wenn die Seite zum ersten Mal geladen wird. Aber als Adam unter dem wahren Grunde erwähnt war er „... hatte eine Datenquelle Unterklasse erstellt, die Object geerbt, aber es wurde nicht richtig umgesetzt.“. Sorry für meine Annahme, da Adam. Dank

Doch der Rest meiner Lösung denke, ich werde für diejenigen, mit manuell ermittelten Datenquellen stecken arbeiten.

dh

Stellen Sie Ihre Gridview nach oben, und Notiz - ohne eine Datasource-Eigenschaft! Hier ist mein Beispiel:

     <asp:GridView ID="gvStudents" DataKeyNames="StudentID" runat="server" 
            ShowFooter="True" AutoGenerateColumns="False" Width="100%" AllowSorting="True" AllowPaging="true" PageSize="10" OnPageIndexChanging="gvStudents_PageIndexChanging">

Als nächstes eine private Methode machen oder Routine, die Sie auf aufrufen können, wann immer Sie brauchen die gridview auf einer neuen Seite zu erzwingen.

private void BindGridViewServer(GridView gv1)
{
    gv1.DataSource = sdsStudents;   //re-attach the datasource
    gv1.DataBind();                 //get a page of data AllowPaging must be true
}

Als Nächstes erstellen Sie die OnPageIndexChanging Methode:

protected void gvStudents_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView myGV = (GridView)sender;
    myGV.PageIndex = e.NewPageIndex;
    BindGridViewServer(myGV);
}

Aus Gründen diese Antwort zu vervollständigen, hier ist mein Code, wo ich die Daten zu laden, wenn ich will - nicht, wenn ein postpack abgefeuert wird, ist der Standard ...

    protected void btnSEARCH(object sender, EventArgs e)
        {
//some code
                    //bind the gridview to the datasource here and then bind!
                    gvStudents.DataSource = sdsStudents;
                    gvStudents.DataBind();
//more code etc
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top