【问题标题】:How to get all the paginated records in a jqgrid table?如何获取 jqgrid 表中的所有分页记录?
【发布时间】:2016-03-24 00:30:27
【问题描述】:

我正在尝试获取分页记录的所有行(所有页面中存在的记录)。但是,我只得到第一页中的记录。如何获取表中的所有记录?有没有办法只使用javascript来实现这一点? 我正在使用 jquery 过滤器来获取 jqgrid 中的过滤记录,因此我需要将过滤后的数据分布在多个页面中。

var x=$("#list").getGridParam("reccount");//get only current page records count.

var gridData = $("#list").jqGrid('getRowData');// get only current page records

$("#list").jqGrid('getGridParam','data');//obtain all records but not filtered records in all     pages

这是我的代码:

$(document).ready(function() {
var grid = $("#list"),
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"}
];
grid.jqGrid({
    datatype: "local",
    data: mydata,
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
      {name:'id',index:'id', key: true, width:70, 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}
   ],
   search:true,
   pager:'#pager',
   jsonReader: {cell:""},
   rowNum: 8,
   rowList: [5, 10, 20, 50],
   sortname: 'id',
   sortorder: 'asc',
   viewrecords: true,
   height: "100%",
   caption: "Multiple search with local data"
 });
grid.jqGrid('navGrid','#pager',{add:false,edit:false,del:false,search:true,refresh:true},
{},{},{},{multipleSearch:true, multipleGroup:true, showQuery: true});

});

【问题讨论】:

  • 请发布您如何在 jqgrid 上应用过滤器的代码..
  • 嗨 yagnesh.. 请查看下面的链接以应用过滤器.. jsbin.com/xeyeroha/5/edit ...... 在示例中,从选择选择器中选择“测试”选项,然后单击应用过滤器..这将导致提供 2 页记录.....请建议如何获取两个页面中的所有行...谢谢...,
  • 在下面查看我的答案。希望对你有帮助。
  • 在初始化 jqgrid 时包含 loadComplete。如果您已经使用它,请在其中包含 this.p.lastSelected = lastSelected;

标签: jquery jqgrid pagination


【解决方案1】:

你可以使用jQgrid的loadComplete(){}回调:

loadComplete: function(gridData){
   console.log(gridData); // will print all the records available in the grid.
}

【讨论】:

  • 谢谢杰。你给我指出了正确的方向。我在上面回答了这个问题。
【解决方案2】:

据我了解,您需要网格的所有行数据而无需分页

没有任何函数可以直接获取过滤数据。内部JqGrid使用$.jgrid.from过滤本地数据。
在应用过滤器后获取 JqGrid 的所有行数据:

var oldFrom = $.jgrid.from,lastSelected;

$.jgrid.from = function (source, initalQuery) 
{
    var result = oldFrom.call(this, source, initalQuery),
    old_select = result.select;
    result.select = function (f) {
        lastSelected = old_select.call(this, f);
        return lastSelected;
    };
    return result;
};

lastSelected 将在对网格元素应用过滤后返回所有行数据的数组,这些元素是最后一次排序或过滤操作的结果。
$.jgrid.from 是全局的,数据未连接到网格。如果页面上有多个网格,那会很不舒服。可以通过在每个网格的loadComplate 代码中的以下行来解决这个小缺点:

loadComplete: function () {
    this.p.lastSelected = lastSelected;
}

通过上面的代码,我们添加了新的 JqGrid 参数lastSelected,它与数据参数类似,但只保存最后过滤的数据。

您可以通过以下代码获取过滤数据:

var filteredData = $grid.jqGrid('getGridParam', 'lastSelected');  

JqGrid Demo (Get all data after filter)

【讨论】:

  • 嗨 Yagnesh .. 感谢您的回答.. 非常感谢.. 但是您能否建议如何将您的代码包含在“loadcomplete”中,因为我已经在我的代码中使用过一次“loadcomplete”...
  • 将我的代码合并到您的代码中。将我在loadcomplete 中的行添加到您的函数中。
  • 谢谢 yagnesh .. 我得到了所有过滤的记录,但唯一的问题是第二次点击 applyfilters(),它返回数据对象......但第一次点击它返回“null”。 .. 此外,将出现带有“正在加载...”标签的图片。你能建议如何解决这个问题吗?
  • jsbin 中更新您的代码并提供更新的链接。我的代码没有发现任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-24
  • 1970-01-01
  • 2020-10-19
  • 2019-06-30
相关资源
最近更新 更多