Sortieren funktioniert nicht mit jqGrid
Ich habe Probleme bekommen, jqGrid zu Sortieren. Ich möchte vorzuziehen tun diese Sortierung auf dem client, aber ich bin auch bereit, einen neuen Aufruf an die Datenbank zu erhalten, werden die sortierten Ergebnisse als gut.
Ich kann Sie auf die Spaltenüberschriften und die Art Pfeile die Richtung ändern, aber die Daten nicht ändern.
Ist, habe ich mich über diese Frage, jedoch ruft reloadGrid schien nicht zu helfen.
Meine gesamte raster ist wie folgt:
var x = $("#grid").jqGrid({
jsonReader: { root: "rows", repeatitems: false },
datatype: "json",
height: 'auto',
autowidth: true,
forceFit: true,
colNames:['ID','Name'],
colModel:[
{name:'id', key:true, index:'id', width:60, sorttype:"int", jsonmap:"id"},
{name:'name', index:'name', width:90, jsonmap: "name"}
],
caption: "Results",
loadonce: true,
sortable: true,
loadComplete: function() {
jQuery("#grid").trigger("reloadGrid"); //Call to fix client-side sorting
}
});
//This data comes from a web service call, hard coding in to test
var jsonData = [
{id: 1, name: 'Apple'},
{id: 2, name: 'Banana'},
{id: 3, name: 'Pear'},
{id: 4, name: 'Orange'}
];
x[0].addJSONData( { rows: jsonData } );
InformationsquelleAutor Mike Christensen | 2012-04-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Last unsortierte Daten aus dem server und möchte irgendwie einfach die lokalen Daten einmal Sie sollten sich nicht
jQuery("#grid").trigger("reloadGrid");
innerhalb vonloadComplete
. Die callback -loadComplete
aufgerufen wird, auf jeder Sortieren oder paging von lokalen Daten zu. Außerdem wäre es besser, rufen SiejQuery("#grid").trigger("reloadGrid");
innerhalb vonsetTimeout
. Im Falle der vollständigen ersten laden der raster fertig zu werden, bevor Sie zurückladen.Ich nicht getestet, aber ich nehme an, die richtigen Codes von
loadComplete
könnten etwa die folgendenIm Fall der
reloadGrid
wird nur einmal aufgerufen werden beim ersten laden der raster vom server. Beim nächsten Aufruf der Wert vondatatype
option wird bereits'local'
.AKTUALISIERT: Kostenlose jqGrid ist die Gabel von jqGrid, die ich entwickeln, beginnend mit dem Ende 2014. Es hat viele neue features. Man kann die option
forceClientSorting: true
zu zwingen, Sortierung und Filterung von Daten auf der client-Seite vor der aktuellen Seite der Daten angezeigt wird jqGrid. So kann man nur hinzufügenforceClientSorting: true
- option, und entfernen Sie den trick, beschrieben in der alten Antwort.Sie sind herzlich willkommen! Fast jede Art der Implementierung auf dem server wird schnell als Sortieren in JavaScript. Also die Sortierung auf dem server ist der beste Weg.
Ich bin damit einverstanden, zumal einige der Sortierung, die ich zu tun hatte, involviert mehrere Schlüssel; also ich würde gehabt haben, um herauszufinden, wie das schreiben benutzerdefinierter Funktionen Vergleich für jqGrid - dessen bin ich mir sicher, ist möglich, aber ich beschloss, gehen Sie den einfacheren Weg für jetzt.
sollte nicht es sein
$this.jqGrid('getGridParam', 'sortname') == ''
Sie tatsächlich die Prüfung nicht entspricht.Nein. Man sollte prüfen, ob der Wert von
sortname
parameter nicht leere Zeichenfolge. So sollte man===
(oder!==
) und""
oder''
. Die aktuelle code-code-trigger -reloadGrid
nur, wenn die geladenen Daten müssen sortiert werden, also nur, wennsortname
parameter nicht leere Zeichenfolge.InformationsquelleAutor Oleg
Fand eine Lösung, wenn auch nicht ganz sicher, warum dies funktioniert. Vielleicht kann jemand eine bessere Antwort.
InformationsquelleAutor Mike Christensen
loadonce
funktioniert nur mit dem eingebauten Lader. Wenn Sie als Datentyp Funktion sollten Siedatatype:local
manuell nach dem ersten laden des Gitters mit der benutzerdefinierten Funktion.Probieren Sie etwas wie dieses:
InformationsquelleAutor Alfredo Papirriqui