jqgrid setGridParam Datentyp: lokal

8

Ich möchte nicht den Server treffen und jede Zeile zurückholen, wenn ich mit dem Pager durch die Datensätze blättere. Ich lese, wenn ich den Datentyp = local im vollständigen Blog in der .ajax Funktion UND wenn ich loadonce: true setze, sollte ich in der Lage sein zu vermeiden, auf das Grid warten zu müssen, um mit den Daten neu zu laden.

Wenn ich diese Dinge mache, geht das Raster jedoch nicht auf die nächste Seite. Es hängt einfach ...
Was mache ich falsch?

%Vor%     
webdad3 02.07.2010, 22:14
quelle

3 Antworten

17

Es gibt einige Missverständnisse. Wenn Sie datatype: local verwenden, müssen Sie jqGrid selbst mit Methoden wie addRowData füllen oder die Daten einmal mit data -Parameter (für jqGrid Version 3.7 und höher) festlegen. Die Verwendung von datatype: local nach jqGrid lädt also keine Daten selbst und Ihr datatype: processrequest -Parameter wird ignoriert.

Wenn Sie loadonce: true -Parameter verwenden wollen, der seit Version 3.7 von jqGrid unterstützt wird, sollten Sie alle Parameter von jqGrid für JSON oder XML (zB datatype: json in Ihrem Fall) und einen zusätzlichen Parameter loadonce: true . Dann wird jqGrid nach dem ersten Laden der Daten den Datentyp in datatype: local umschalten und danach wird es unabhängig vom Server arbeiten, aber einige Parameter ignorieren (wie datatype: processrequest in Ihrem Fall).

Noch eine kleine Bemerkung. Die meisten Eigenschaften von jsonReader , die Sie in Ihrem Beispiel verwenden, sind Standardeinstellungen (siehe dieses Wiki ). Die Parameter, die Sie verwenden, werden mit den Standardeigenschaften kombiniert, so dass es ausreicht, Parameter wie zu verwenden jsonReader: { repeatitems: false, id: "ID"}

AKTUALISIERT : OK Jeff. Es scheint mir, dass Sie zur Lösung Ihres Problems einige Code-Beispiele von beiden Seiten benötigen: Client und Server. Hier ist ein kleines Beispiel, das ich für Sie erstellt und getestet habe.

Zunächst einmal die Serverseite. Im ASMX-Webservice definieren wir eine Webmethode, die Testdaten für Ihre Tabelle generiert:

%Vor%

wobei die Klassen JqGridData und TableRow wie folgt definiert sind:

%Vor%

Hier sehen Sie, dass die Web-Methode TestMethod keine Parameter hat und die vollständigen Daten zurückgibt. Das Paging, Sortieren und Durchsuchen von Daten erfolgt mit jqGrid (Version 3.7 oder höher).

Um solche Daten zu lesen und in jqGrid zu setzen, können wir Folgendes tun:

%Vor%

Einige Kommentare zur Definition von jqGrid:

Um mit dem ASMX-Web-Service über JSON zu kommunizieren, müssen Sie in der entsprechenden jQuery.ajax -Anforderung Folgendes tun:

  • dataType: 'json' muss festgelegt werden.
  • contentType:'application/json; charset=utf-8' muss festgelegt werden.
  • Die Daten, die an den Server gesendet werden, müssen JSON-codiert sein.

Um all dies zu tun, verwende ich datatype , ajaxGridOptions und serializeGridData Parameter von jqGrid. Ich mache JSON-Kodierung mit JSON.stringify function (das entsprechende JavaScript kann von hier heruntergeladen werden).

Dann müssen die empfangenen Daten dekodiert werden. Ich mache das mit meiner Lieblingsfunktion von jqGrid - jsonReader mit Funktionen (siehe diese SO-Post und dieses Wiki ).

Am Ende verwenden wir loadonce: true , was die datatype von jqGrid von 'json' in 'local' ändert und wir können alle Vorteile des lokalen Paging, Sortings und erweiterten Suchens seit jqGrid Version 3.7 sofort nutzen.

Wenn Sie mit dem ASMX-Webservice Server-seitiges Paging, Sortieren und Suchen (oder erweiterte Suche) durchführen möchten, ist dies ebenfalls möglich. Um hier ein wenig Platz zu sparen und Codebeispiele zu trennen, werde ich das entsprechende Beispiel in Ihrer anderen Frage posten: jqgrid Seite 1 von x pager (siehe Abschnitt AKTUALISIERT).

    
Oleg 03.07.2010, 07:14
quelle
2

Es ist ein bisschen spät, aber hier ist eine (die?) super-einfache Lösung für alle zukünftigen Lösungssuchenden:

%Vor%

Das ist es. Ich benutze 3.7.2, kann für keine anderen Versionen sprechen. Das Problem (anscheinend) rührt von "loadonce" her, das nur mit den vordefinierten Datentypwerten arbeitet, was eine Funktion nicht ist. I glaube die anderen integrierten Werte funktionieren auch, aber "local" macht Sinn.

    
Groxx 17.08.2010 15:42
quelle
0

Das hat für mich funktioniert. Ich hatte ein Problem mit Paging und Sortierung funktioniert nicht. Wahrscheinlich wegen der .d- und __type-Elemente, die im JSON-Objekt in .net zurückgeschickt wurden. Mit den zusätzlichen Konfigurationen in diesem Beispiel. Das hat funktioniert!

Ich war verrückt. Auf diese Weise können Sie das Grid konfigurieren, wenn Sie .Net als Ihren Webservice verwenden. Es ist so konfiguriert, dass die Datenelemente des JSON-Objekts analysiert und korrekt an den richtigen Stellen im Grid festgelegt werden, damit das Paging und das Sortieren funktionieren.

Ich musste kommentieren, weil ich sicher bin, dass es da draußen ein paar Leute gibt, die dieses Grid verwenden möchten, aber .Net als ihren Webservice verwenden.

    
Puff Espinosa 23.07.2010 17:01
quelle

Tags und Links