11 Stimmen

JqGrid Sortierung auf der Clientseite

Ich habe ein Baumgitter mit automatischem Laden von Zeilen. Das Ziel ist es, das Gitter nach dem Baumspalten auf der Client-Seite zu sortieren.

Aber jedes Mal, wenn ich auf die Spaltenüberschrift zur Sortierung klicke, wird ein Ajax-Aufruf zur Sortierung ausgeführt, aber alles, was ich brauche, ist eine Sortierung vor Ort unter Verwendung der lokalen Daten.

Habe ich falsche Gitterparameter oder funktioniert der Baum nicht mit einer clientseitigen Sortierung in der Baumspalte?

Aktuelle jqGrid-Parameter für die Sortierung sind:

loadonce: true, // um die Sortierung auf der Client-Seite zu aktivieren
sortable: true // um die Sortierung zu aktivieren

0 Stimmen

6voto

Justin Ethier Punkte 126797

Um das clientseitige Sortieren zum Laufen zu bringen, musste ich reloadGrid aufrufen, nachdem das Raster geladen wurde:

loadComplete: function() {
    jQuery("#myGridID").trigger("reloadGrid"); // Aufruf um das clientseitige Sortieren zu fixieren
}

Ich musste dies nicht bei einem anderen Raster in meiner Anwendung tun, weil es konfiguriert war, um Daten abzurufen über einen anderen AJAX-Aufruf, anstatt Daten direkt vom Raster abzurufen:

editurl: "clientArray"
datatype: "local"

0 Stimmen

Hallo, könntest du bitte etwas genauer erläutern, was #groups ist?

0 Stimmen

Es ist nur die ID des Rasters. Ich habe die ID nur geändert, um das klarer zu machen.

1 Stimmen

Vielen Dank dafür, obwohl ich deine Lösung nicht vollständig verstehe. Es gibt eine weitere Antwort von Groxx unter stackoverflow.com/questions/1329002/…, die den Trick macht. Nur für den Fall, dass es jemanden interessiert...

2voto

Stuntbeaver Punkte 690

Ich verwende das clientseitige Sortieren auf jqGrid und rufe einen neuen Satz von JSON-Daten ab, wenn sich eine Auswahlliste ändert. Sie müssen rowTotal auf einen Betrag setzen, der höher oder gleich der Anzahl der zurückgegebenen Zeilen ist, und dann den Datentyp kurz vor dem Neuladen des Rasters auf 'json' setzen.

// Wert der Auswahlliste geändert
$('#alertType').change(function () {
        var val = $('#alertType').val();
        var newurl = '/Data/GetGridData/' + val;
        $("#list").jqGrid().setGridParam({ url: newurl, datatype: 'json' }).trigger("reloadGrid");        
});

// jqGrid Einrichtung
$(function () {
        $("#list").jqGrid({
            url: '/Data/GetGridData/-1',
            datatype: 'json',
            rowTotal: 2000,
            autowidth: true,
            height:'500px',
            mtype: 'GET',
            loadonce: true,
            sortable:true,
            ...
            viewrecords: true,
            caption: 'Übersicht',
            jsonReader : { 
                root: "rows", 
                total: "total", 
                repeatitems: false, 
                id: "0"
            },
            loadtext: "Lade Daten...",
        });
    });

1voto

ytkim Punkte 11
$(function () {
        $("#list").jqGrid({
            url: '/Data/GetGridData/-1',
            datatype: 'json',
            rowTotal: 2000,
            autowidth: true,
            height:'500px',
            mtype: 'GET',
            loadonce: true,
            sortable:true,
            ...
            viewrecords: true,
            caption: 'Übersicht',
            jsonReader : { 
                root: "rows", 
                total: "total", 
                repeatitems: false, 
                id: "0"
            },
            loadtext: "Daten werden geladen...",
        });
    });

3 Stimmen

Bitte erkläre auch den Code, damit es lehrreicher wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X