是否有可能以当前排序的顺序跨多个页面获取所有 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.
我使用的是最新版本的 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.