jqgrid setGridParam Datentyp:lokale
Ich will nicht zu schlagen, die server und bringen Sie wieder in jeder Zeile, wenn ich das durchblättern der Datensätze mit dem pager. Ich habe gelesen, dass wenn ich den datatype = lokale in der kompletten blog in der .ajax-Funktion UND wenn ich loadonce:true dann sollte ich in der Lage zu vermeiden, warten Sie, bis das raster neu zu laden mit den Daten.
Jedoch, wenn ich diese Dinge, die das Gitter nicht auf die nächste Seite gehen. Hängt es sich einfach auf...
Was mache ich falsch?
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
datatype: processrequest,
mtype: 'POST',
jsonReader: {
root: "rows", //arry containing actual data
page: "page", //current page
total: "total", //total pages for the query
records: "records", //total number of records
repeatitems: false,
id: "ID" //index of the column with the PK in it
},
colNames: ['Name', 'Title'],
colModel: [
{ name: 'name', index: 'name', width: 250 },
{ name: 'title', index: 'title', width: 250 }
],
pager: '#pager',
rowNum: 10,
rowList: [10, 20, 30],
sortorder: "desc",
viewrecords: true,
height: '250px',
caption: 'My first grid',
loadonce: true
}).navGrid('#pager', {edit: false, add: false, del: false});
});
function processrequest(postdata) {
...
$.ajax({
...
complete: function (jsondata, stat) {
if (stat == "success") {
var thegrid = jQuery("#list2")[0];
var jsonObject = (eval("(" + jsondata.responseText + ")"));
thegrid.addJSONData(jsonObject.d);
$(".loading").hide();
} else {
$(".loading").hide();
alert("Error with AJAX callback");
}
$("#list").setGridParam({ datatype: 'local' });
}
});
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einige Missverständnisse. Wenn Sie
datatype: local
dann füllen Sie jqGrid sich mit Methoden wieaddRowData
oder legen Sie die Daten in einmal mitdata
parameter (für jqGrid-version 3.7 und höher). Also die Verwendung vondatatype: local
folgt zu jqGrid nicht geladen werden alle Daten selbst und Ihredatatype: processrequest
- parameter wird ignoriert.Wenn Sie verwenden möchten
loadonce: true
parameter, die unterstützt, seit version 3.7 von jqGrid, sollten Sie alle Parameter von jqGrid für JSON oder XML (zum Beispieldatatype: json
in deinem Fall) und einen zusätzlichen parameterloadonce: true
. Dann nach dem ersten laden der Daten jqGrid schalten Sie den Datentypdatatype: local
und nach, dass es funktionieren wird unabhängig auf server ignorieren aber einige Parameter (wiedatatype: processrequest
in Ihrem Fall).Noch eine kleine Bemerkung. Die meisten Eigenschaften von
jsonReader
die Sie verwenden, in Ihrem Beispiel sind Standard (siehe dieses wiki). Die Parameter, die Sie verwenden, wird in Kombination mit der Standard-Eigenschaften, so ist es genug, um parameter wiejsonReader: { repeatitems: false, id: "ID"}
AKTUALISIERT: OK Jeff. Es scheint mir, um Ihr problem zu lösen brauchen Sie ein paar mehr code-Beispiele, die von beiden Seiten: client und server. Hier ist ein kleines Beispiel, das ich erstellt und für Sie getestet.
Zunächst der server-Seite. In der ASMX-web-service definieren wir eine web-Methode, die generieren Sie ein test-Daten für die Tabelle:
wo Klassen
JqGridData
undTableRow
sind definiert wie folgt:Hier sehen Sie die web-Methode
TestMethod
hat keine Parameter und Beiträge zurück, die vollständigen Daten. Paging, Sortieren und suchen von Daten erfolgt durch den jqGrid (version 3.7 oder höher).Auslesen dieser Daten und in jqGrid wir tun können, folgende:
Einige Kommentare über die definition von jqGrid:
Kommunizieren mit ASMX-web-service durch JSON muss man Folgendes in den entsprechenden
jQuery.ajax
Anfrage:dataType: 'json'
muss eingestellt werden.contentType:'application/json; charset=utf-8'
muss eingestellt werden.Alles zu tun, diese benutze ich
datatype
,ajaxGridOptions
undserializeGridData
Parameter von jqGrid. Ich mache JSON-Kodierung mitJSON.stringify
Funktion (das zugehörige JavaScript kann heruntergeladen werden von hier).Dann die empfangenen Daten müssen dekodiert werden. Ich mache das mit mein Lieblings-feature von jqGrid -
jsonReader
mit Funktionen (siehe das SO ein post und dieses wiki).Am Ende verwenden wir
loadonce: true
die änderung derdatatype
von jqGrid von'json'
zu'local'
und wir können sofort alle Vorteile der lokalen paging, Sortieren und erweiterte Suche bereits seit jqGrid version 3.7.Wenn Sie wollen, stellen Sie server side paging, Sortieren und suchen (oder erweiterte Suche) mit ASMX-web-service ist es auch möglich. Zu sparen ein wenig Platz hier, und um eigenen code-Beispiele, die ich werde nach dem entsprechenden Beispiel in deiner anderen Frage jqgrid Seite 1 von x pager (siehe AKTUALISIERTE Teil).
Es ist ein bisschen spät, aber hier ist einer (der?) super-einfache Lösung für eine zukünftige Lösung-Suchenden:
Das ist es. Ich bin mit der 3.7.2, kann nicht sprechen, für alle anderen Versionen. Das problem (scheinbar) stammt von 'loadonce' nur die Arbeit mit den vordefinierten Datentyp die Werte, die eine Funktion nicht. Ich glauben den anderen gebaut-Werte wird auch funktionieren, aber die 'lokale' macht Sinn.
Dieser arbeitete für mich. Ich hatte ein Problem mit paging und das Sortieren funktioniert nicht. Wahrscheinlich, weil der .d und __geben Sie Elemente, die gesendet wurden, zurück in das JSON-Objekt in .net. Allerdings mit der zusätzlichen Konfigurationen in diesem Beispiel. Das funktionierte !
War ich fuchsteufelswild. Dies ist der Weg, um so konfigurieren Sie das raster, wenn Sie verwenden .Net so wie Ihr webservice. Es ist so konfiguriert, analysiert und richtig eingestellt, die Daten-Elemente aus dem JSON-Objekt in die richtige Position gebraucht, in der Startaufstellung zu ermöglichen, für die paging-und Sortier-arbeiten.
Ich hatte zu kommentieren, denn ich bin sicher, es gibt ein paar Menschen gibt, die möchten, verwenden Sie dieses Raster, sind aber mit .Net so wie Ihr webservice.