【问题标题】:Pagination problem in jqgrid with array data带有数组数据的jqgrid中的分页问题
【发布时间】:2011-03-30 08:23:39
【问题描述】:

我在 jqgrid 中遇到了分页问题,​​数组数据有 18 条记录,但即使我指定了 pagination: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]);

【问题讨论】:

  • 你的问题帮助了我的问题。 :)

标签: javascript jquery json jqgrid pagination


【解决方案1】:

您的主要问题是您应该在添加大量行后重置rowNum。线

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

在您的代码末尾将解决问题。我建议您添加该行

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

直接在jqGrid之后定义。然后,您不仅可以进行数据分页,还可以进行数据过滤(搜索)和刷新(重置过滤器)。

再补充几点:

  • 在 mydata 数组的定义中,您应该在 ']' 之前删除 ','。
  • 在 for 循环中,您应该使用 i&lt;mydata.length 而不是 i&lt;=mydata.length。
  • 您应该从 jqGrid 的定义中删除以下参数,这些参数要么不存在(如pagination),要么在上下文中没有意义(如loadonce: true):pagination,page,loadonce, totalpages、totalrecords、showpage、imgpath。

如果您根据data: myData 参数构造jqGrid,或者一次设置来自mydata 的所有数据(参见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#array_data 中addRowData 方法的描述),您将获得最佳结果。

【讨论】:

    【解决方案2】:

    奥列格是正确的。 添加 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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2014-01-03
      • 2011-04-17
      • 2013-04-04
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多