这里似乎有一些关于这个问题的问题,他们有一些很好的答案,但似乎我的情况有点不同。我需要过滤jqGrid中显示的记录,但完全是客户端。
由于多种原因,我填充网格的最佳方式是使用直接发送到页面上的JavaScript的数组。网格本身根本不与服务器交互。我在各种网格事件中都有一些自定义的AJAX,但就是这样。 (基本上,我将它与现有的一组服务相结合,这些服务不会发生重大变化。)
我要做的是根据简单的文本输入和按钮过滤网格。我的页面有文本输入,按钮和表格(在文档就绪时成为网格)。我想绑定到按钮的click事件(正常的jQuery事件绑定,没什么特别的),并使用文本输入中的值作为jqGrid上的显示过滤器。
通过“过滤器”我的意思是仅显示包含输入中文本的匹配(在任何字段中)的记录。然后,要显示所有记录,只需清空输入并再次单击该按钮。此外,网格是多选的,选择需要通过过滤保持。我只需要能够隐藏与输入中的行不匹配的行。
这可能吗?
答案 0 :(得分:21)
要过滤本地网格,您只应填写jqGrid的filters
参数的postData
属性,并另外设置search:true
。
要保存对网格的选择,您可以将reloadGrid
与其他参数[{page:1,current:true}]
一起使用(请参阅here)。
相应的代码可以是以下
$("#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}]);
});
我为你做了the demo哪个过滤了两列'客户'('名称')和'注释'('注意')你可以扩展代码以搜索你需要的所有列。
根据保存行选择的确切含义,您可以将selarrrow中的当前选择保存在变量中,并使用setSelection方法恢复所选行。