获取未从jqGrid过滤的所有行

Don*_*lor 6 jqgrid

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

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

Ole*_*leg 24

没有直接的方法来获取您需要的信息.在内部,jqGrid使用$ .jgrid.from来过滤本地数据.$.jgrid.fromaddLocalData里面使用的主要代码.为了得到你需要的结果而不研究所有代码,我建议使用所有过滤数据将通过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选项.见演示演示的列表.