Проблема разбиения на страницы в jqgrid с данными массива - PullRequest
4 голосов
/ 16 августа 2010

Я сталкиваюсь с проблемой разбивки на страницы в jqgrid с данными массива, имеющими 18 записей, но записи не отображаются на страницах, даже если я указал разбиение на страницы: true, pager: jQuery ('# pager1').Можете ли вы помочь мне реализовать нумерацию страниц вместо прокрутки.

<script type="text/javascript">
 jQuery("#list4").jqGrid({
 datatype: "clientSide",
 height: 200,
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
    {name:'id',index:'id', width:60, sorttype:"int"},
    {name:'invdate',index:'invdate', width:90, sorttype:"date"},
    {name:'name',index:'name', width:100},
    {name:'amount',index:'amount', width:80, align:"right",sorttype:"float"},
    {name:'tax',index:'tax', width:80, align:"right",sorttype:"float"},
    {name:'total',index:'total', width:80,align:"right",sorttype:"float"},
    {name:'note',index:'note', width:150, sortable:false}
    ],
    multiselect: true,
 pagination:true,
  pager:jQuery('#pager1'), 
 rowNum: 10,
 rowList: [5, 10, 20, 50],
 sortname: 'id',   
 sortorder: 'asc',
 viewrecords: true,
 page: 1,
 loadonce: true,  
 totalpages: 2,   
 totalrecords:18,     
 showpage:true,   
 imgpath: "/themes/default/images",         
 caption: "Manipulating Array Data"
 });
 var mydata = [
 {id:"1",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"2",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"3",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
 {id:"4",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"5",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"6",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
 {id:"7",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"8",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"9",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
 {id:"10",invdate:"2007-10-01",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"11",invdate:"2007-10-02",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"12",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
 {id:"13",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"14",invdate:"2007-10-05",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"15",invdate:"2007-09-06",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},
 {id:"16",invdate:"2007-10-04",name:"test",note:"note",amount:"200.00",tax:"10.00",total:"210.00"},
 {id:"17",invdate:"2007-10-03",name:"test2",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
 {id:"18",invdate:"2007-09-01",name:"test3",note:"note3",amount:"400.00",tax:"30.00",total:"430.00"},

 ];
 for(var i=0;i<=mydata.length;i++)   
 jQuery("#list4").addRowData(i+1,mydata[i]);

Ответы [ 2 ]

10 голосов
/ 16 августа 2010

Ваша основная проблема заключается в том, что вы должны сбросить rowNum после добавления большого количества строк.Строка

jQuery("#list4").setGridParam({ rowNum: 10 }).trigger("reloadGrid");

в конце вашего кода решит проблему.Я рекомендую вам добавить строку

jQuery("#list4").jqGrid('navGrid','#pager1',{edit:false,add:false,del:false});

непосредственно после определения jqGrid.Тогда у вас будет не только подкачка данных, но и фильтрация данных (поиск) и обновление (сброс фильтра).

Еще несколько небольших замечаний:

  • в определении mydata массив, который вы должны удалить ',' before ']'.
  • в цикле for вы должны использовать i<mydata.length вместо i<=mydata.length.
  • , который вы должны удалить из определения jqGrid следующим образомпараметры, которые либо не существуют (например, pagination), либо не имеют смысла в контексте (например, loadonce: true): pagination, page, loadonce, totalpages, totalrecords, showpage,imgpath.

Вы получите наилучшие результаты, если создадите jqGrid с учетом параметра data: myData или сразу установите все данные из mydata (см. Описание метода addRowData в http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#array_data).

1 голос
/ 22 марта 2012

Олег прав. Добавление jQuery ("# ​​list4"). SetGridParam ({rowNum: 10}). Trigger ("reloadGrid"); работы.

Хотя это может не работать, если установлено свойство formatter , где значения rowObject будут неопределенными (если они используются)

Поэтому убедитесь, что в вашем методе форматирования вы всегда проверяете их наличие.

, например

function getFormattedFileName(cellvalue, options, rowObject) {

        if(!rowObject.fileName) {// this is due to ...trigger("reloadGrid");
            return cellvalue; // the value is already formatted, let's just return it
        }
 return rowObject.fileName.trim();
}
...