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 der loadComplete. Wenn in der filter-Leiste für amount keine Daten existieren, sollten Sie nichts tun. Wenn in amount die Daten vorhanden sind, werden die Daten gefiltert werden, und Sie sollten wählen Sie alle Zeilen. Ist es so? Außerdem sehe ich nicht gridview: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 die amount match der grid-Wert amount 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 von loadComplete. Wenn Sie kommentiert TEN Teil und nutzen gridview: true und hoverrows: 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 das amount Suchfeld muss gefiltert werden. ich nehme an, es kann eine einzigartige amount für jeden und jede Zeile. also, wenn die amount ü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 mit sopt:["eq"] für "Betrag" Spalte nur die genaue Abstimmung erfolgt.
  • Sie können defaultSearch parameter der filterToolbar 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 im jsonReader. Wenn eine Spalte kann interpretieren wie die id kann man cell:"" 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.

InformationsquelleAutor Sam | 2011-04-14
Schreibe einen Kommentar