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