是否有可能以当前排序的顺序跨多个页面获取所有 jqGrid 行?

Is it possible to get all jqGrid rows, across multiple pages, in the currently sorted order?

我使用的是最新版本的 jqGrid (v4.7.1)。我有一个填充有本地数据并具有多页数据的网​​格。用户已对数据客户端进行排序。我现在想按排序顺序检索 all 行。可以这样做吗?

这是我所知道的:

var data = this.ui.grid.jqGrid('getGridParam', 'data');

此语句 returns all 行在网格中,但 returns 它们处于初始状态。不受任何排序操作的影响。

var rowData = this.ui.grid.jqGrid('getRowData');

此语句 return 在 当前页面 中的所有行,但 return 它们按正确的排序顺序排列。

我正在考虑获取所有数据并 运行 通过网格的排序功能,但该功能受到严密保护。我可以通过调用类似以下内容来访问它:

var data = this.ui.grid.jqGrid('getGridParam', 'data');
$.jgrid.from([])._doSort(data, 0)

但是,此代码仍会抛出错误,因为 jqGrid 需要在调用 _doSort 之前设置一些其他属性。我有信心我可以让它工作,但感觉就像我在以一种非常意外的方式破解某些代码。

我有哪些选择?

编辑:这行得通,但它很老套:

var rowNum = this.ui.grid.getGridParam('rowNum');
this.ui.grid.setGridParam({ rowNum: 10000 }).trigger("reloadGrid");
var data = this.ui.grid.getRowData();
this.ui.grid.setGridParam({ rowNum: rowNum }).trigger("reloadGrid");

class $.jgrid.from 仍将由 jqGrid 在内部使用。未记录这些方法的用法。一般来说,首先应该使用 创建 一个 object 使用 $.jgrid.from:例如可以使用

var data = $("#mygrid").jqGrid("getGridParam", "data");
var query = $.jgrid.from(data);

然后应该设置object的一些内部属性,例如,使后面的查询不区分大小写

query = query.ignoreCase();

然后可以对数据进行排序或过滤。排序应该使用

query.orderBy("columnNameByWhichOneSort",
    "a", // or "d" for "desc" sorting
    stype,  // sorttype from colModel oder "text"
    srcfmt, // typically ""
    sfunc); // typically null

要获得最终结果,应使用

var queryResults = query.select();

我建议您在 addLocalData 内部设置一些断点并调试代码。如果您点击列 header,网格将被排序,您将看到 addLocalData 如何在内部使用 $.jgrid.from

也许你可以只关注 the answer 和 "subclass" $.jgrid.from。因此,您可以根据用户的排序和搜索条件获得完整结果(所有页面)。

更新free jqGrid provides lastSelectedData option. See the demo in the list of demos.