我在网格中有本地数据。如何在用户使用过滤器工具栏后获取未删除的所有行或ID?无论分页如何,我都需要获取所有过滤的行。
例如,假设我从网格中的50行开始。用户使用过滤器工具栏,行集减少到10行。我怎样才能获得那十行?
答案 0 :(得分:24)
没有直接的方法来获取您需要的信息。在内部,jqGrid使用$.jgrid.from来过滤本地数据。在addLocalData内部使用$.jgrid.from
的主要代码。为了获得您需要的结果而不研究所有代码,我建议使用select
$.jgrid.from
select
方法返回所有过滤数据的事实(参见the line代码)。我的建议是在将数据剪切到页面大小之前捕获数据。
为此,我建议使用子类:覆盖$.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;
};
方法。我在为the answer和this one创建的示例中演示了该技术。
在您的情况下,代码将是
lastSelected
现在变量$.jgrid.from
将保存元素数组,这些元素是最后一次排序或过滤操作的结果。由于loadComplate
是全局的,因此数据未连接到网格。如果您在页面上有更多的网格,那将会很不舒服。可以使用每个网格的loadComplete: function () {
this.p.lastSelected = lastSelected; // set this.p.lastSelected
}
代码中的以下行来解决小缺点:
lastSelected
我们引入新的jqGrid参数data
的方式,其参数结构为alert
,但仅保留最后过滤的数据。
以下代码将在$("#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(', '));
}
});
消息
id
我使用了localReader.id参数,因为用于本地数据的属性名称通常为_id_
或_id_
。如果使用loadonce: true
选项从服务器加载数据,将使用lastSelectedData
。
The demo演示了这种方法。如果一个过滤器(例如,仅来自FedEx的数据,然后单击“显示Ids”按钮,则会看到有关所有过滤的信息,而不仅仅是关于当前页面上显示的数据:
更新:free jqGrid提供了新的{{1}}选项。请参阅the demo中的the list of demos。
答案 1 :(得分:1)
您可以使用搜索工具栏的“搜索后”选项:
var filteredIDs = new Array(); //Global variable
$("#"+gridId).jqGrid("filterToolbar", { stringResult:true, searchOnEnter:false,
afterSearch:function(){
filteredIDs = $("#"+gridId).getDataIDs();
}
});
如果要获取已过滤的行而不是过滤的ID,请使用getRowData()而不是getDataIDs()。
答案 2 :(得分:0)
所有,我找到了另一个更容易包含的答案
loadComplete: function (gridData) {
var isSearchPerformed = $grid.getGridParam("postData")._search;
if (isSearchPerformed) {
$("#spanFilterTotal").text(gridData.records);
}
答案 3 :(得分:0)
您想要的只是:
$.each($grid.getRowData(), function( index, value ) {
a.push(value["COLUMN_NAME"]); //Get the selected data you want
});