JQGrid - 事件网格仅“第一次”完成/应用默认过滤器首次加载
Posted
技术标签:
【中文标题】JQGrid - 事件网格仅“第一次”完成/应用默认过滤器首次加载【英文标题】:JQGrid - Event grid complete just for the "first time"/Apply default filter first loading 【发布时间】:2021-01-27 21:16:50 【问题描述】:我正在使用 JQGrid(jQuery jQgrid 不是 Gurrido)版本 4.6.0,我需要一个仅在网格第一次完成时启动的事件。我尝试了loadComplete
和gridComplete
,但似乎两者都做或多或少相同的事情(每次我过滤/分页网格时它们都会启动)。
我想在第一次加载页面时应用默认过滤器。我写了这段代码来过滤网格:
f.rules.push(field: "ETAT_PROJ_",op:"eq",data:projOver)
grid[0].p.search = true
$.extend(grid[0].p.postData,filters:JSON.stringify(f));
grid.trigger("reloadGrid",[page:1,current:true]);
但我找不到执行它的事件。 我也试过这个:
$().ready(function()
var f = groupOp:"AND",rules:[];
f.rules.push(field: "ETAT_PROJ_",op:"eq",data:projOver)
grid[0].p.search = true
$.extend(grid[0].p.postData,filters:JSON.stringify(f));
grid.trigger("reloadGrid",[page:1,current:true]);
)
我还尝试使用 searchoption 属性直接在我的colModel
的定义中应用过滤器:
name: "ETAT_PROJ_", hidden: true,search:true,searchoptions:dataInit:1, attr:title:1,
在网格定义中也是如此:
search: true,
postData: 'filters': '"groupOp":"AND","rules":["field":"ETAT_PROJ_","op":"eq","data":"1"]',
但是没有任何工作可以按我的意愿工作(第一次加载网格时我仍然拥有所有数据)但是当我执行操作时(例如分页)应用过滤器...
编辑 - 解决方案示例
经过一些研究,我找到了一种在第一次加载时应用默认过滤器的方法。这肯定不是最好的方法,但这是我找到的唯一方法。 :)
setTimeout(function()
grid = $("table#jqGrid-table-projets");
console.log("load default filter")
f = groupOp:"AND",rules:[]
f.rules.push(field:"ETAT_PROJ_",op:"eq",data:"1");
grid[0].p.search = true
$.extend(grid[0].p.postData,filters:JSON.stringify(f));
grid.trigger("reloadGrid",[page:1,current:true]);
, 1500)
【问题讨论】:
【参考方案1】:指定使用的版本非常重要 - 不仅仅是版本 4。 有 jqGrid 4.x 版、Guriddo jqGrid 4.x 版和 fork free-jqGrid 4.x 版。所有这些都在一些定义和事件上有所不同。
无论如何,有一个非常简单的解决方案。这个想法是:
1.设置一个全局标志(比如说)为真。
2.在您的 gridComplete 或 loadComplete 检查此标志是否为真,如果是则运行您的代码。
3.在您的代码将此标志设置为 false 之后
var run_me_once = true;
...
$("#grid").jqGrid(
...
gridComplete :function()
if(run_me_once)
// here your code
run_me_once = false;
);
更准确地说,您可以在第一次运行后删除 gridComplete 事件,但这将完成这项工作
【讨论】:
您的活动方式很好,但似乎reloadGrid
函数在这种情况下不起作用,因为网格没有重新加载过滤器应用...不要知道为什么
你有什么想法吗?
编辑:事实上它工作,但仍然不是我想要的。当我加载页面时,我拥有所有数据(未按我想要的方式过滤)但是当我执行触发gridComplete
事件的操作时,过滤器是适用的......我想要的是在页面时直接过滤网格事实上加载。事件还是有问题...
事件没有问题,这些事件在网格加载数据之后起作用,而不是在您想要的之前。使用哪个版本的jqGrid?
啊,确实。我认为网格必须完全启动以过滤它,但也许在网格负载更好之前过滤。我要试试这个。我正在使用 jQuery jQGrid 4.6.0 版以上是关于JQGrid - 事件网格仅“第一次”完成/应用默认过滤器首次加载的主要内容,如果未能解决你的问题,请参考以下文章
jqGrid 工具栏搜索仅适用于前 20 行。分页为 20,40,60