【问题标题】:JQGrid : restoring toolbar values and operators from filterJQGrid:从过滤器中恢复工具栏值和运算符
【发布时间】:2018-09-05 14:43:30
【问题描述】:

我正在使用 JQGrid(版本 5.3.0)显示动态表中的值(我事先不知道列号和列名)。我从对服务器的 ajax 调用中检索列架构,以及需要应用于网格的过滤器,然后从那里创建 JQGrid。

我面临的问题是我找不到从传递给表格的过滤器中正确重新填充过滤器工具栏的方法。

代码如下:

$.ajax({
    url: {url to get columns and filter},
    type: 'POST',
    postData: { productID: 98 }
    success: function (result) {
        if (result) {
            $('#grid').jqGrid({
                url: {url to get data},
                datatype: 'json',
                search: true,
                postData: { productID: 98, filters: result.filter },
                myType: 'GET',
                colModel: result.columns,
                jsonReader: {
                    root: 'Data',
                    page: 'Page',
                    total: 'Total',
                    records: 'PageSize'
                },
                pager: $('#gridpager'),
                rowNum: 25,
                gridview: false,
                afterInsertRow: function (rowid, rowdata, rowelem) {
                    var color = rowelem.Color;
                    if (color != 'white') {
                        $("tr.jqgrow#" + rowid).addClass("color-" + color);
                    }
                },
            }).filterToolbar({
                groupOp: 'AND',
                defaultSearch: "cn",
                searchOnEnter: true,
                searchOperators: true,
                stringResult: true,
            });
        }
    }
});

以下是列模型的示例:

[
    {
        "name":"DESCRIPTION",
        "label":"Description",
        "searchoptions":
        {
            "sopt": ["bw","cn","nc","ew","eq","ne","in"],
            "attr":{"class":"glyphicon glyphicon-filter"}
        }
    },
    {
        "name":"SKU_CODE",
        "label":"SKU Code",
        "searchoptions":
        {
            "sopt":["bw","cn","nc","ew","eq","ne","in"],
            "attr":{"class":"glyphicon glyphicon-filter"}
        }
    },
    {...}
]

这里是过滤器:

"{\"groupOp\":\"AND\",\"rules\":[{\"field\":\"DESCRIPTION\",\"op\":\"bw\",\"data\":\"D\"}]}"

执行此代码时,从我的数据源加载数据,应用过滤器,但过滤器栏保持空白。

有没有办法用传入参数的过滤器中的值自动填充过滤器工具栏?我已经尝试解析过滤规则,并用匹配值填充输入,但我找不到恢复运算符的方法。

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:
    1. 由于使用了 Guriddo jGrid 5.3 版,很高兴知道我们已经重写了our documentation。在这里,您可以找到很多问题的答案。在您的情况下,您应该知道有一种方法可以完全满足您的要求。方法名称refreshFilterToolbar。由于在该方法的当前实现中没有考虑 serchOperator,我们已在 GitHub 中修复了该方法以支持它们。

    如果您使用不支持 searchOperators 的现有方法,您的代码应如下所示:

    $("#grid").jqGrid({
    ...
    }).filterToolbar({
        groupOp: 'AND',
        defaultSearch: "cn",
        searchOnEnter: true,
        searchOperators: true,
        stringResult: true
    }).refreshFilterToolbar({"filters": result.filter});
    

    如果您使用支持 searchOperators 的 github 版本,您的代码应该是这样的

    $("#grid").jqGrid({
    ...
    }).filterToolbar({
        groupOp: 'AND',
        defaultSearch: "cn",
        searchOnEnter: true,
        searchOperators: true,
        stringResult: true
    }).refreshFilterToolbar();
    

    注意我们没有传递filter参数,它是自动获取的。

    1. 我看到您使用 afterInsertRow 事件根据条件设置行的某个类。仅当没有其他方法可以执行此操作时,才应使用此事件。在相对大的数据集中使用此事件会导致读取速度缓慢,并且在某些情况下会挂起。应该非常小心地使用它。

    在您的情况下,您可以为此目的使用 rowattr 事件。请在同一文档页面中阅读有关它的更多信息。不要忘记将 gridview 设置为 true 或其他单词

    ...
    rowNum: 25,
    gridview: true,
    rowattr: function (rowdata, rowelem) {
        var color = rowelem.Color;
        if (color != 'white') {
            return { "class" : "color-" + color};
        }
    },
    

    【讨论】:

    • 完美!更新到 github 上的最新版本并使用 .refreshFilterToolbar() 就像您描述的那样工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2013-01-14
    • 2013-07-16
    • 2011-01-27
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多