Как быстро загрузить данные в jqGrid - PullRequest
0 голосов
/ 02 декабря 2011

Проблема загрузки данных в jqgrid занимает много времени, в настоящее время я использую

for(var i=0;i<homeFileList.length;i++)
        jQuery("#tblHomeFileList").jqGrid('addRowData',i+1,homeFileList[i]);

для загрузки данных в сетку, но поскольку она повторяется, она занимает много времени, есть ли способ загрузить данные быстрее?

Я прочитал addRowData, можно даже вставить несколько данных одновременно ( Чтение ссылки ), я думал, что это может быть быстрее, но это ничего не добавляет в мою сетку

См. Мой код ниже.

var homeFileList=[];
$(xml).find('IPC').each(function(){ 
    $(this).children('homefilelist').each(function(){ 
        $(this).children('homefilelist_info').each(function(){ 
            var row={};
            isPresent=true;
            row.permission=$(this).attr('permission');
            row.hardlink=$(this).attr('hardlink');
            row.owner=$(this).attr('owner');
            row.group=$(this).attr('group');
            row.fsize=$(this).attr('fsize');
            row.month=$(this).attr('month');
            row.date=$(this).attr('date');
            row.time=$(this).attr('time');
            row.filename=$(this).attr('filename');
            homeFileList.push(row);
        });
    });
});

Обновление после комментария Олега

//HomeFileList
if(homeFileList.length>0)
{
    jQuery("#tblHomeFileList").jqGrid({
        datatype: "clientSide",
        colNames:['Permission','Hardlink','Owner','Group','Size','Month','Date','Year/Time','Filename'],
        colModel:[
            {name:'permission',index:'permission', align:"left",width:"100px"}, 
            {name:'hardlink',index:'hardlink', align:"left", width:"80px"},
            {name:'owner',index:'owner', align:"left",width:"100px"},
            {name:'group',index:'group', align:"left"},
            {name:'fsize',index:'fsize', align:"left", width:"90px"},
            {name:'month',index:'month', align:"left",width:"100px"},   
            {name:'date',index:'date', align:"left", width:"80px"},
            {name:'time',index:'time', align:"left",width:"100px"},
            {name:'filename',index:'filename', align:"left"}
        ],

                    pager : '#HomeFileListGridpager',
        rowNum:10,
        rowList:[10,50,100],
        scrollOffset:0,
        height: 'auto',
        autowidth:true,
        viewrecords: true,
        gridview: true
            });

    /*This for loop loads my data from homeFileList into grid
for(var i=0;i<homeFileList.length;i++)
        jQuery("#tblHomeFileList").jqGrid('addRowData',i+1,homeFileList[i]);*/

    alert($.isArray(homeFileList)); //returns true


    jQuery("#tblHomeFileList").jqGrid('addRowData',homeFileList);


    jQuery("#tblHomeFileList").setGridParam({rowNum:10}).trigger("reloadGrid");
}
else
    gridUnavailable("#tblHomeFileList");

XML-ответ (я сократил xml ниже, так как это огромные данные внутри homefilelist)

<?xml-stylesheet type="text/xsl" href="client9.xsl"?><client version="1.0"><IPC>
<homefilelist>
    <homefilelist_info permission='-rwxr-xr-x' hardlink='1' owner='asimon' group='support' fsize='61597' month='Mar' date='22' time='2011' filename='libpmwspsvrcmn.so' />
    <homefilelist_info permission='-rwxr-xr-x' hardlink='1' owner='asimon' group='support' fsize='21778' month='Mar' date='22' time='2011' filename='libpmorablk.so' />
    <homefilelist_info permission='-rwxr-xr-x' hardlink='1' owner='asimon' group='support' fsize='36226' month='Mar' date='22' time='2011' filename='libpmjvm.so' />
</homefilelist>
</IPC>
</client>

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Вы можете использовать data параметр jqGrid:

$("#tblHomeFileList").jqGrid({
    datatype: "local",
    data: homeFileList,
    ...
});

См. демо . В случае, если целые данные сетки будут размещены в сетке, и первая страница будет рисоваться. Я уверен, что вы сразу увидите разницу в производительности для большого количества строк.

Я рекомендую дополнительно включить атрибуты formatter и sorttype в сетку. Например, определение 'fsize', которое содержит целочисленные данные, может быть следующим:

{name: 'fsize', index: 'fsize', width: 90, formatter: 'integer', sorttype: 'int'}
0 голосов
/ 02 декабря 2011

Если вы можете получить свои данные в JSON / XML, вы можете быстро добавить их, используя недокументированный атрибут jqGrid.p.data и просто установив его, а затем перезагрузить сетку. Вы должны убедиться, что ваши данные уже соответствуют сопоставленным столбцам.

if(_theGrid == undefined) {
    _theGrid = $("#list3").jqGrid({...});
}
else {
    _theGrid.p.data = data;
    $(_theGrid).trigger('reloadGrid');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...