jqgrid laden große Daten-set ohne Paginierung
Ich Frage mich, ob es einen besseren Weg, um laden große Json-Datensatz aus dem server.
Ich bin mit jqgrid als loadonce:true. ich brauche zu laden, um 1500 Datensätze auf einmal und auch ich glaube nicht, verwenden Sie Paginierung Optionen. gibt es eine bessere Möglichkeit, dies zu erreichen? Vielen Dank im Voraus.
Dies ist mein Grid-code -
$(function(){
$("#testgrid").jqGrid({
url:getGridUrl,
datatype: 'json',
mtype: 'GET',
height: 250,
colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
{name:'id',index:'id', width:60, sorttype:"int",search:false},
{name:'invdate',index:'invdate', width:90, sorttype:"date",search:false},
{name:'name',index:'name', width:100,search:false},
{name:'amount',index:'amount', width:80, align:"right",sorttype:"float"},
{name:'tax',index:'tax', width:80, align:"right",sorttype:"float",search:false},
{name:'total',index:'total', width:80,align:"right",sorttype:"float",search:false},
{name:'note',index:'note', width:150, sortable:false,search:false}
],
multiselect: true,
multiboxonly:true,
caption: "Manipulating Array Data",
pager: '#testgridpager',
//Auto load while scrolling
//scroll: true,
//to hide pager buttons
pgbuttons:false,
recordtext:'',
pgtext:'',
loadonce: true,
sortname: 'id',
sortorder: 'asc',
viewrecords: true,
multiselect: true,
jsonReader : {
root: "rows",
//page: "page",
//total: "total",
records: "records",
repeatitems: false,
cell: "cell",
id: "id"
},
loadComplete: function(data) {
var rowId;
//alert(data.length);
//alert('load complete'+data.rows.length);
//set checkboxes false if mode is set to true
if(mode){
for(var i=0;i<data.rows.length;i++){
rowId=data.rows[i].id;
disableRow(rowId);
var searchVal = $("#gs_amount").val().trim();
if(searchVal ==data.rows[i].amount){
jQuery("#testgrid").jqGrid('setSelection',rowId);
//heighlightSearch();
}
}
}
}
});
//toolbar search
$("#testgrid").jqGrid('filterToolbar',{stringResult:true,searchOnEnter:false});
});
function disableRow(rowId){
$("#testgrid").jqGrid('setRowData', rowId, false, {color:'gray'});
var trElement = jQuery("#"+ rowId,$('#testgrid'));
trElement.removeClass("ui-state-hover");
trElement.addClass('ui-state-disabled');
trElement.attr("disabled",true);
}
- Könnten Sie den javascript-code, die Sie derzeit verwenden? Verwenden Sie die lokale Auslagerung der Daten? Verwenden Sie
gridview:true
parameter? - Dank oleg. ich verwendet gridView-parameter. finden Sie die aktualisierte Frage.
- Ich bin sehr beschäftigt, aber falls Ihr problem nicht gelöst werden, bis am Samstag werde ich schreiben Sie einige Vorschläge. Was tun
disableRow
? Ich bin nicht sicher, ob ich verstehe, was Sie tun innerhalb derloadComplete
. Wenn in der filter-Leiste füramount
keine Daten existieren, sollten Sie nichts tun. Wenn inamount
die Daten vorhanden sind, werden die Daten gefiltert werden, und Sie sollten wählen Sie alle Zeilen. Ist es so? Außerdem sehe ich nichtgridview:true
parameter. Ist das Beispiel, das du gepostet hast das Reale Beispiel, die Sie getestet? Wie lange ist der laden in Ihre tests? Welcher browser ist das wichtigste für Sie? - Vielen Dank für Ihre wertvolle Zeit, Oleg. dies ist der grid, die ich verwendet, um zu testen, jqgrid. ich gerade entfernt
gridview
param, um zu überprüfen, die Folgen. innerhalb loadComplete wenn dieamount
match der grid-Wertamount
es muss ausgewählt werden. du hast Recht ich tun müssen, um leere check-in loadComplete. Ich bin noch auf der Suche nach besseren Möglichkeiten, dies zu tun(laden von grossen Daten). IE 8 wird meiner wichtigsten browser. Vielen Dank für Ihre Antwort Oleg. Ich freue mich auf Eure Gedanken zu diesem.Es zu schätzen wissen. - Wenn Sie etwas Zeit haben, können Sie senden Sie mir bitte eine Wegbeschreibung zu jeder Ansatz dafür? wenn Sie Zeit haben..nur dankbar für Ihre Hilfe.
- Ich bereite die demo für Euch an der Zeit. Durch die Art und Weise, in der Sie z.B. vergessen
rowNum
mit einem Wert größer oder gleich 1500. Nach diesem werden Sie sehen, dass Ihr Netz ist meist langsam, da der Aktionen, die Sie innerhalb vonloadComplete
. Wenn Sie kommentiert TEN Teil und nutzengridview: true
undhoverrows: false
der Gitter Konstruktion akzeptabel sind. Was ist unklar für mich ist folgende: das aktuelle code deaktivieren Sie alle Zeilen (in vielerlei Hinsicht) und dann versuchen Sie, wählen Sie alle Zeilen. Was Sie wirklich tun wollen? - Zeilen mit "ui-state-disabled' Klasse kann nicht gewählt werden.
- Vielen Dank für Ihre Antwort.nach der
mode
muss ich deaktivieren Sie die gefilterten Zeilen.die Zeilen können nicht ausgewählt werden. sonst brauche ich um zu filtern was auch immer Wert eingegeben haben, in dasamount
Suchfeld muss gefiltert werden. ich nehme an, es kann eine einzigartigeamount
für jeden und jede Zeile. also, wenn dieamount
übereinstimmung der bestimmten Menge im Netz, die Zeile muss automatisiert überprüft werden. das ist, was ich versuche zu tun. wenn mein Ansatz falsch ist, bitte lassen Sie mich wissen, was zu ändern. Danke. - Ich verstehe nicht ganz, was du meinst. Wenn Sie
searchOnEnter:false
, dann das grid starten gefiltert werden fast sofort nach dem Start die Eingabe des "#gs_amount". So alle Zeilen, die im raster angezeigt werden, werden die gefilterten Zeilen. Wenn Sie also schreiben, "ich brauche zu deaktivieren, die gefilterten Zeilen" es bedeutet, dass alle Zeilen des Rasters werden deaktiviert. Ich verstehe nicht ganz die passende, die Sie benötigen. Wenn Sie definieren searchoptions mitsopt:["eq"]
für "Betrag" Spalte nur die genaue Abstimmung erfolgt. - Sie können
defaultSearch
parameter derfilterToolbar
legen Sie die Standard-matching-Operationen. Ich benutze fast überall für die integer-und die 'select' Spalten, die die genau übereinstimmen 'eq' und der groß-und Kleinschreibung (ignoreCase:true
parameter von jqGrid) enthalten Suche ('cn') für die Spalten mit strings. - Vielen Dank oleg für die Ratschläge. ich werde diese befolgen. gibt es irgendeinen Hinweis in Bezug auf große Datensätze zu laden?
- In meiner Antwort habe ich ein Beispiel, welche Belastungen 1500 Zeilen und die Leistung ist nicht schlecht. Ich empfehle nur besser zu nutzen, mehr kompakte Verpackung der Daten mit
repeatitems:false
imjsonReader
. Wenn eine Spalte kann interpretieren wie die id kann mancell:""
statt (siehe meine Antwort). Viel wichtiger ist, wie Sie mit den Daten arbeiten. Einfache Schleife, wo Sie finden, row rowid ist zu langsam. Außerdem würde Ihnen empfehlen auf lokale Daten auslagern. 1500 Zeilen können nicht angezeigt werden auf einmal. Wenn Sie das Blättern durch die Einstellung rowNum zu einigen kleinen Wert der Leistung viel viel besser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Am Beispiel von diese demo können Sie sehen, die Zeit der Belastung 1500 Zeilen für das Gitter im Falle der Nutzung von
gridview: true
.Den meisten performance-problem deines Beispiels sind innerhalb von
loadComplete
Funktion. Wenn Sie brauchen, um einige änderungen in der Startaufstellung, die Sie verwenden sollten jQuery zu manipulieren, die raster enthalten. Die beste Leistung können Sie archivieren, wenn Sie die Verwendung von DOM-Elementen für das grid direkt, wie im Beispiel,Finden Sie die entsprechenden Beispiel live -hier.
In der Umsetzung von
loadComplete
Funktion ich benutze die Tatsache, dass jqGrid mitloadonce:true
parameter interne Parameter_index
unddata
die verwendet werden, um Zugriff auf den Inhalt des Rasters. Im Beispiel habe ich deaktiviert, die Zeilen, die nicht enthalten "200" in deramount
Spalte.AKTUALISIERT: Die Antwort beschreibt die Verwendung
rowattr
Rückruf zur Vereinfachung der Lösung und haben die beste Leistung (im Fall vongridview: true
von der Ursache).Ich würde geneigt sein, zu schauen das automatische laden auf scroll-Funktion von jqGrid. Ich würde nie im laden 1500 Zeilen im Voraus. Irgendeinem Grund Sie nicht Seite?