Frage

Ich habe eine Datentabelle, die rund 30.000 Datensätze zurückgibt. Ich Anzeige dieser Datensätze in einer ASP: Gridview-Steuerelement. Ich habe ein Drop-down-Steuerung, bei der ich den Benutzer möchte im Gridview angezeigt werden können, die Anzahl der Datensätze wählen. Der Standard sollte alle sein, aber es könnte auch Werte wie 20, 50, 100 zum Beispiel. Ich bin mir nicht ganz sicher, wie dies zu tun.

Was passiert, wenn ich nicht haben Paging eingeschaltet. Wird Pagesize noch?

ich fest einprogrammiert GridView.PageSize = 1 und es kehrte noch alle Datensätze.

War es hilfreich?

Lösung

Wenn Sie möchten, dass Pagesize arbeitet Sie Haben AllowPaging von Gridview auf true zu setzen. Natürlich müssen Sie die Methode erstellen, um das Ereignis zu verwalten Pageindexchanging.

Wie folgt aus:

protected void myGvw_OnPageIndexChanging(object sender, GridViewPageEventArgs e) 
{
     myGvw.PageIndex = e.NewPageIndex;
     // then recall the method that bind myGvw
}

Die DropDown könnte die Eigenschaft Autopostback auf true gesetzt haben und auf seine OnSelectedIndexChanged Sie setzen müssen

myGvw.PageSize = Convert.ToInt32(myDropDown.SelectedValue)

Andere Tipps

Mit der Pagesize Eigenschaft des Gridview. Link-.

Sie können den Wert der Dropdown hinzufügen (20, 50, 100), um Ihre Abfrage so dass Sie nur die Top-Auswahl (20, 50, 100) Aufzeichnungen.

Werden Sie auch mit Paging werden?

Paging sollte immer mit so früh wie möglich in der Datenauswahl behandelt werden. Sie wollen nicht, 30.000 Datensätze aus der DB in den App-Server abzurufen, um dann zeigen, nur 50 von ihnen.

So etwas wie: (zur Auswahl Seite 3, 50 pro Seite)

select top 50 from x where pk not in (select top 100 pk from x)

Welche übersetzt:

CREATE PROCEDURE sspGetItems (@pageSize int, @pageNum int)
AS
SELECT TOP @pageSize 
FROM x
WHERE pk NOT IN 
(
 SELECT TOP (@pageNum - 1) * @pageSize pk FROM x
)

Offensichtlich mehr Pflege benötigt um das Sortieren usw. getroffen werden.

Hier ist, was ich tun würde. Erstens würde ich eine Spalte in der Datatable hinzufügen, die als Gegen dienen würde, wenn es nicht schon dort ist. Dann binden Sie Ihre Gridview an eine Dataview. Hier einige Code zu zeigen, was ich spreche:

            //add column with counter
            table.Columns.Add("counter", typeof(int));
            for (int i = 0; i < table.Rows.Count; i++)
            {
                table.Rows[i]["counter"] = i+1;
            }

Dann erhalten die Standardansicht von der Datentabelle und stellen Sie die RowFilter:

            DataView view = table.DefaultView;
            view.RowFilter = "counter <= 100"; //or whatever number the user selected

Schließlich, so binden die Gridview Dataview direkt an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top