jqgrid behalten-filter auf neu laden
Diese Frage wurde als eine Menge, so bitte vergib mir meine Fragen wieder ein.
Habe ich ein raster von einer url geladene.
Benutze ich loadonce: true
Benutze ich filtertoolbar:
$("#status").jqGrid('filterToolbar', { stringResult:true, searchOnEnter:false, autosearch: true, defaultSearch: "cn" });
Ich habe ein dropdown-such-Liste, aus der ich auswählen kann was ich Suche. Funktioniert Super.
Ich habe eine navbutton ich auf das initiieren reload alle 30 Sekunden. Funktioniert Super.
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-play', onClickButton: function ()
{
stint = setInterval (function() {
postfilt = $("#status").jqGrid('getGridParam', 'postData').filter;
$("#status").jqGrid('setGridParam',{
url: './ar_status.cgi?systemtype=' + systype,
datatype: "json",
postData: postfilt,
search: true,
loadtext: "Refreshing grid...",
loadonce: true,
loadui: "block"
});
$("#status").jqGrid().trigger("reloadGrid");
}, 30000);
},
title: 'Start Auto Refresh (every 30 sec.)'
});
Verwendung von google chrome kann ich sehen, die Filter, die angegeben wurden, wird an den server gesendet:
systemtype:production
_search:true
nd:1358887757603
rows:1000
page:1
sidx:system
sord:asc
totalrows:700
filters:{"groupOp":"AND","rules":[{"field":"system","op":"eq","data":"ATTDA02"}]}
Kann ich den filter wechseln zwischen reload und sehen Sie die neue, sogar mehrere Filter:
systemtype:production
_search:true
nd:1358887847592
rows:1000
page:1
sidx:system
sord:asc
totalrows:700
filters:{"groupOp":"AND","rules":[{"field":"system","op":"eq","data":"ATTDA02"},{"field":"dow","op":"cn","data":"MO"}]}
Ich bin mit multipleSearch: true initial load. Ich bin mir ziemlich sicher, dass das beibehalten Sie auf neu laden,
In der Startaufstellung, die filtertoolbar behält meine filter-Kriterien, sowohl text und wählt, aber wenn das Gitter lädt, wird der Filter ignoriert, und die gesamte Datenbestand wird diese in den raster.
Habe ich versucht, viele Beispiele hier gepostet. Ich habe versucht, indem [{current:true}], um die reloadGrid Anruf - kein Unterschied. Ich kann nicht scheinen, um behalten und anwenden der Filter auf reload.
Ich würde gerne den reload immer wieder den vollen Datensatz vom server (was gut), und erlauben, die aktuellen filter-Einstellungen, um zu Steuern, was angezeigt wird, nachdem der laden. Ich möchte nicht, verwenden Sie den post-Daten zum Aufbau einer neuen SQL-select-Anweisung - server side filtering, denn zu jeder Zeit kann der Benutzer wollen klicken Sie auf die pause-Taste, wählen Sie einen neuen filter ein und-Sicht etwas anderes aus der gesamten Datenmenge ohne weiteres laden.
$("#status").jqGrid('navButtonAdd','#statuspager', { caption: '', buttonicon: 'ui-icon-pause', onClickButton: function ()
{
clearInterval(stint);
},
title: 'End Auto Refresh'
});
Wie kann das getan werden, ohne dass cookies verwendet werden, als ich sah, wie in einem post?
Könnte ich versuchen, mit jqGridExport 'Ing der postfilt var, und dann jqGridImport' Ing, aber hatte gehofft, für einen direkteren Ansatz. Ich bin mir auch nicht sicher, dass dies helfen würde, da ich bereits alles was ich brauche hier im Netz via postData.
Als seitliche Anmerkung, in meinem setGridParam oben, die loadtext-ich geben Sie nie angezeigt. Stattdessen die Standard - "Loading..." angezeigt. Alle anderen Parameter arbeiten.
Vielen Dank im Voraus,
Mike
Lösung. Die komplette loadComplete zu behalten, filtern, Sortieren, indizieren und zu Sortieren, um nach einem [json] reload vom server:
loadComplete: function() {
var $this = $(this);
postfilt = $this.jqGrid('getGridParam','postData').filters;
postsord = $this.jqGrid('getGridParam','postData').sord;
postsort = $this.jqGrid('getGridParam','postData').sidx;
if ($this.jqGrid("getGridParam", "datatype") === "json") {
setTimeout(function () {
$this.jqGrid("setGridParam", {
datatype: "local",
postData: {filters: postfilt, sord: postsord, sidx: postsort},
search: true
});
$this.trigger("reloadGrid");
}, 50);
}
}
InformationsquelleAutor Mike | 2013-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, aber ich vermute, dass der Ursprung deines ersten Problems sein könnte mischen
postData.filters
undpostData
- und Gebrauchsspurenfilter
- Eigenschaft anstelle von filtern`. Verwenden Siebekommen
filter
- Eigenschaft anstelle derfilters
. Sie erhaltenundefined
Wert. So ist die EinstellungpostData
zupostfilt
bedeutet nichts.Das nächste problem ist, dass die Antwort des Servers enthält nicht-gefilterten Daten. Zwingen filtern der Daten lokal Sie erneut laden, das Gitter sofort nach dem laden vom server beendet haben. Sie können dies tun, innerhalb von
loadComplete
. Genau hier können SiepostData.filter
wenn nötig, stellen Siesearch: true
- und trigger-reloadGrid Veranstaltung. Es ist nur wichtig, um dies zu tun einmal zu haben, die keine Rekursion und Sie müssen nicht festlegendatatype
zurück"json"
im Fall. Diedatatype
geändert"local"
und das Ende der Beladung von der server-im Falle der Nutzungloadonce: true
option. Wenn Sie möchten, wenden Sie Filter lokal Sie haben, um neu zu laden raster, nachdem mit Optionendatatype: "local", search: true
undpostData
mitfilters
Angabe der filter, die müssen durch angewendet. Sehen Sie den code aus die Antwort oder ein weiteres die anderen Dinge, aber der code, die Sie brauchen, werden sehr nah.Sie sind herzlich willkommen! Ich kann mich nur wiederholen, sollten Sie den code von die Antwort. Laden Sie full, Daten vom server mit
datatype: "json"
undloadonce: true
. Dann sollten Sie triggerreloadGrid
sofort ausloadCompleted
wie in der Antwort. Es lokale Sortierung und Filterung angewendet auf die Daten geladen. Später sollten Sie änderndatatype
zu"json"
wenn Sie müssen, aktualisieren Sie die Daten neu laden vom server.Sie sind sehr geduldig, Oleg. Ich ging über diese wieder und [mit Absicht] ich hatte die Links aus der setTimeout-Funktion auf loadComplete. Es schien nicht notwendig, aber wieder hinzufügen macht den Unterschied. Ich habe jetzt genau das, was ich bin nach. Ich bin nicht groß auf kopieren/einfügen/hoffe, dass es funktioniert. Können Sie erklären, warum setTimeout benötigt wird?
Der Unterschied ist sehr groß. Die callback-Funktion
loadComplete
genannt werden, die von jqGrid während der Verarbeitung der Daten, die vom server zurückgegeben werden (siehe der Linie). Daher ist die Verarbeitung der Antwort vom server zurückgegeben werden, ist noch nicht abgeschlossen. Die Verwendung vonsetTimeout
ermöglicht das beenden der aktuellen Verarbeitung der Antworten und dann der nächstereloadGrid
verarbeitet werden.Ich dachte, es wäre etwas anderes als ein delay-Mechanismus, da kann ich den timeout auf null und immer noch die gewünschten Ergebnisse erhalten. Trotzdem, vielen Dank nochmal für die Hilfe, und für alle deine Beiträge zu den jqgrid-community. Sehr großzügig.
InformationsquelleAutor Oleg
Vielen Dank!!!!
Ich nur Hinzugefügt, ein wenig zu Ihrer Lösung zu behalten, Seitenzahl:
InformationsquelleAutor cmedine