jqGrid使用本地数据时,当jqGrid配置的rowNum小于本地总数据量(records属性记录总数据,可以通过records获取到本地总数据量),调用getRowData方法获取到的只是显示的部分内容,而本地所有数据行。
如果是通过data或者datastr配置的本地数据,获取所有数据很简单,调用$(\'#gridid\').jqGrid(\'getGridParam\',\'data\')/$(\'#gridid\').jqGrid(\'getGridParam\',\'datastr\')就能获取到原始数据了(datastr还得需要自己处理一下)。
但是对于启用了查询功能,调用getGridParam方法或者getRowData方法就不灵光了,getGridParam获取的所有数据,而非查询后匹配的结果集合。而getRowData则获取到的是rowNum指定大小的数据集,如果查询结果小于rowNum就没问题,如果是查询结果数据量大于rowNum配置,就无法获取所有查询匹配的数据行了。
如果要想获取到jqGrid本次查询所有匹配的所有数据,可以有2种方法获取
1)设置rowNum为所有查询后得到的总records数量,然后 在调用getRowData,再还原rowNum为原来的记录数量,这个会操作2次jqGrid加载数 据,性能有损耗,但是相比较修改源代码安全,要是源代码修改错了,你就得重新下载过jqGrid了。
var o = jQuery("#jqgrid");
var rows = o.jqGrid(\'getRowData\'); //获取当前显示的记录
console.log(rows)
var rowNum = o.jqGrid(\'getGridParam\', \'rowNum\'); //获取显示配置记录数量
var total = o.jqGrid(\'getGridParam\', \'records\'); //获取查询得到的总记录数量
o.jqGrid(\'setGridParam\', { rowNum: total }).trigger(\'reloadGrid\'); //设置rowNum为总记录数量并且刷新jqGrid,使所有记录现出来调用getRowData方法才能获取到所有数据
var rows = o.jqGrid(\'getRowData\'); //输出所有匹配的
o.jqGrid(\'setGridParam\', { rowNum: rowNum }).trigger(\'reloadGrid\'); //还原原来显示的记录数量
return rows;
}
2)修改源代码,jqGrid的过滤结果是内部变量,没有对外提供,修改jqGrid提供查询结果的代码语句,增加一个全局遍历记录jqGrid查询后的结果。
jqGrid的查询源代码如下
total = queryResults.length,
page = parseInt(ts.p.page,10),
totalpages = Math.ceil(total / recordsperpage),
retresult = {};
queryResults = queryResults.slice( (page-1)*recordsperpage , page*recordsperpage );//这里对记录进行了裁剪,获取当前页数据
jqGrid-4.4.0压缩版本的源代码如下,如果是其他jqGrid压缩版本代码,可能压缩后的变量名称会不一样,自己慢慢找到类似的代码进行修改
修改后的压缩版本代码,增加一个函数全局变量来保存全部查询命中结果
此时window作用域下的全局变量hitRcds就是全部匹配的记录