我正在使用最新版本的jqGrid(v4.7.1)。我有一个网格,其中填充了本地数据并具有多页数据。用户已对客户端数据进行了排序。我现在想要按排序顺序检索所有行。有可能这样做吗?
以下是我所知道的:
var data = this.ui.grid.jqGrid('getGridParam', 'data');
此语句返回网格中的所有行,但会以初始状态返回它们。它不受任何排序操作的影响。
var rowData = this.ui.grid.jqGrid('getRowData');
此语句返回当前页面中的所有行,但会以正确排序的顺序返回它们。
我正在考虑获取所有数据并通过网格的排序功能运行它,但该功能受到严密保护。我可以通过调用以下内容来访问它:
var data = this.ui.grid.jqGrid('getGridParam', 'data');
$.jgrid.from([])._doSort(data, 0)
但是,此代码仍然会抛出错误,因为jqGrid期望在调用_doSort之前设置其他一些属性。我有信心我可以让这个工作,但感觉就像是在以一种非常无意的方式攻击某些代码。
我有什么选择?
编辑:这有效,但它非常hacky:
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");
答案 0 :(得分:3)
类$.jgrid.from
将由jqGrid在内部使用。没有记录这些方法的用法。通常,首先应使用$.jgrid.from
创建对象:例如,可以使用
var data = $("#mygrid").jqGrid("getGridParam", "data");
var query = $.jgrid.from(data);
然后应该设置对象的一些内部属性,例如,使后面的查询不区分大小写
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内设置一些断点并调试代码。如果您点击列标题,网格将被排序,您将看到addLocalData
在内部使用$.jgrid.from
的方式。
可能你只需要跟随the answer和"子类" $.jgrid.from
。因此,您可以根据用户的排序和搜索条件获得完整结果(所有页面)。
更新:free jqGrid提供lastSelectedData
选项。请参阅the demo中的the list of demos。