我在网格中有本地数据.如何在用户使用过滤器工具栏后获取未删除的所有行或ID?无论分页如何,我都需要获取所有过滤的行.
例如,假设我从网格中的50行开始.用户使用过滤器工具栏,行集减少到10行.我怎样才能获得那十行?
Ole*_*leg 24
没有直接的方法来获取您需要的信息.在内部,jqGrid使用$ .jgrid.from来过滤本地数据.$.jgrid.from在addLocalData里面使用的主要代码.为了得到你需要的结果而不研究所有代码,我建议使用所有过滤数据将通过select方法返回的事实$.jgrid.from(参见代码行).我的建议是在将数据剪切到页面大小之前捕获数据.
为此,我建议使用子类:覆盖方法的select方法$.jgrid.from.我演示了在创建的实例的技术答案和这一个.
在你的情况下代码将是
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;
};
Run Code Online (Sandbox Code Playgroud)
现在变量lastSelected将保存元素数组,这些元素是最后一次排序或过滤操作的结果.因为$.jgrid.from是全局的,所以数据没有连接到网格.如果您在页面上有更多的网格,那将会很不舒服.可以loadComplate通过每个网格的代码中的以下行修复小缺点:
loadComplete: function () {
this.p.lastSelected = lastSelected; // set this.p.lastSelected
}
Run Code Online (Sandbox Code Playgroud)
在我们引入新的jqGrid参数的方式中,该参数lastSelected将具有接近结构作为data参数,但仅保留最后过滤的数据.
以下代码将在alert消息中显示已过滤数据的ID
$("#getIds").click(function () {
var filteredData = $grid.jqGrid('getGridParam', 'lastSelected'), i, n, ids = [],
idName = $grid.jqGrid('getGridParam', 'localReader').id;
if (filteredData) {
for (i = 0, n = filteredData.length; i < n; i++) {
ids.push(filteredData[i][idName]);
}
alert("tolal number of filtered data: " + n + "\n" +
"ids of filtered data:\n" + ids.join(', '));
}
});
Run Code Online (Sandbox Code Playgroud)
我使用了localReader.id参数,因为用于本地数据的属性名称通常是id或_id_._id_如果使用loadonce: true选项,将在从服务器加载数据的情况下使用.
该演示演示了该方法.如果一个过滤器(例如,仅来自FedEx的数据,然后单击"显示Ids"按钮,则会看到有关所有过滤的信息,而不仅仅是关于当前页面上显示的数据:


更新:免费jqGrid提供新lastSelectedData选项.见演示中演示的列表.
| 归档时间: |
|
| 查看次数: |
10008 次 |
| 最近记录: |