jqGrid过滤记录

Dav*_*vid 7 search filter jqgrid

这里似乎有一些关于这个问题的问题,他们有一些很好的答案,但似乎我的情况有点不同.我需要过滤jqGrid中显示的记录,但完全是客户端.

出于多种原因,我填充网格的最佳方法是使用直接发送到页面上的JavaScript的数组.网格本身根本不与服务器交互.我在各种网格事件中都有一些自定义的AJAX,但就是这样.(基本上,我将其与现有的一组服务相结合,这些服务不会发生重大变化.)

我想要做的是根据简单的文本输入和按钮过滤网格.我的页面有文本输入,按钮和表格(在文档就绪时成为网格).我想绑定到按钮的click事件(正常的jQuery事件绑定,没什么特别的),并使用文本输入中的值作为jqGrid上的显示过滤器.

"过滤器"是指仅显示包含输入中文本的匹配(在任何字段中)的记录.然后,要显示所有记录,只需清空输入并再次单击该按钮.此外,网格是多选的,选择需要通过过滤保持.我只需要能够隐藏与输入中的行不匹配的行.

这可能吗?

Ole*_*leg 21

要过滤本地电网,你应该只填写filters了财产postData的jqGrid的参数,并设置附加search:true.

要保存网格的选择,您可以使用reloadGrid附加参数[{page:1,current:true}](请参见此处).

相应的代码可以是以下内容

$("#search").click(function() {
    var searchFiler = $("#filter").val(), grid = $("#list"), f;

    if (searchFiler.length === 0) {
        grid[0].p.search = false;
        $.extend(grid[0].p.postData,{filters:""});
    }
    f = {groupOp:"OR",rules:[]};
    f.rules.push({field:"name",op:"cn",data:searchFiler});
    f.rules.push({field:"note",op:"cn",data:searchFiler});
    grid[0].p.search = true;
    $.extend(grid[0].p.postData,{filters:JSON.stringify(f)});
    grid.trigger("reloadGrid",[{page:1,current:true}]);
});
Run Code Online (Sandbox Code Playgroud)

我为你做了一个演示,为两个列'Client'('name')和'Notes'('note')过滤,你可以扩展代码以搜索你需要的所有列.

依靠什么你到底有保存行选择,你可以需要从保存当前选择指selarrrow在一个变量和恢复所选行与尊重为setSelection方法.