获取未从jqGrid过滤的所有行

时间:2012-03-19 17:43:03

标签: jqgrid

我在网格中有本地数据。如何在用户使用过滤器工具栏后获取未删除的所有行或ID?无论分页如何,我都需要获取所有过滤的行。

例如,假设我从网格中的50行开始。用户使用过滤器工具栏,行集减少到10行。我怎样才能获得那十行?

4 个答案:

答案 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 answerthis 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
id

我使用了localReader.id参数,因为用于本地数据的属性名称通常为_id__id_。如果使用loadonce: true选项从服务器加载数据,将使用lastSelectedData

The demo演示了这种方法。如果一个过滤器(例如,仅来自FedEx的数据,然后单击“显示Ids”按钮,则会看到有关所有过滤的信息,而不仅仅是关于当前页面上显示的数据:

enter image description here

enter image description here

更新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
});