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,我需要一个仅在网格第一次完成时启动的事件。我尝试了loadCompletegridComplete,但似乎两者都做或多或少相同的事情(每次我过滤/分页网格时它们都会启动)。

我想在第一次加载页面时应用默认过滤器。我写了这段代码来过滤网格:

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 - 同一页面上的多个网格仅显示一个寻呼机

单击jqgrid网格时如何仅突出显示单元格

在 jqgrid 下一步按钮单击时,未填充数据

jqGrid 工具栏搜索仅适用于前 20 行。分页为 20,40,60

将navSeparatorAdd栏放在jqgrid中默认刷新按钮之前

在加载jqgrid时,对加载的数据应用默认过滤器