【问题标题】:JQGrid - Event grid complete just for the "first time"/Apply default filter first loadingJQGrid - 事件网格仅“第一次”完成/应用默认过滤器首次加载
【发布时间】: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)

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案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 版
    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多