首页 > 解决方案 > 使用多个“and”和“or”条件过滤 jqgrid

问题描述

我想使用以下搜索条件过滤 jQGrid

Name="Mark" and Age=25 and (city="NY" or city="FL") and (company="xyz" or company="zyx")

下面是我的搜索字符串

{
    "groupOp": "AND",
    "rules": [{
        "field": "Name",
        "op": "eq",
        "data": "Mark"
    }, {
        "field": "Age",
        "op": "eq",
        "data": "25"
    }],
    "groups": [{
        "groupOp": "OR",
        "rules": [{
                "field": "city",
                "op": "eq",
                "data": "NY"
            },
            {
                "field": "city",
                "op": "eq",
                "data": "FL"
            }
        ],
        "groups": [{
            "groupOp": "OR",
            "rules": [{
                    "field": "company",
                    "op": "eq",
                    "data": "xyz"
                },
                {
                    "field": "company",
                    "op": "eq",
                    "data": "zyx"
                }
            ]
        }]
    }]
}

postData: {
    filters: above string
},

但这个搜索不起作用。请帮忙

标签: jqgridfree-jqgrid

解决方案


看来你在最后"groups"一部分有错误。正确的过滤器应该看起来像

{
    "groupOp": "AND",
    "rules": [
        { "field": "Name", "op": "eq", "data": "Mark" },
        { "field": "Age",  "op": "eq", "data": "25" }
    ],
    "groups": [
        {
            "groupOp": "OR",
            "rules": [
                { "field": "city", "op": "eq", "data": "NY" },
                { "field": "city", "op": "eq", "data": "FL" }
            ],
            "groups": []
        },
        {
            "groupOp": "OR",
            "rules": [
                { "field": "company", "op": "eq", "data": "xyz" },
                { "field": "company", "op": "eq", "data": "zyx" }
            ],
            "groups": []
        }
    ]
}

此外,我强烈建议您包含您使用(可以使用)的 jqGrid版本和 fork(免费 jqGrid、商业Guriddo jqGrid JS或版本 <=4.7 中的旧 jqGrid)。

如果您真的使用“免费 jqGrid”(不是版本 <=4.7 中的旧 jqGrid),那么您可以将"IN"运算符与本地数据集一起使用。该值应该是逗号分隔的值列表和

{
    "groupOp": "AND",
    "rules": [
        { "field": "Name",     "op": "eq", "data": "Mark" },
        { "field": "Age",      "op": "eq", "data": "25" },
        { "field": "city",     "op": "eq", "data": "NY,FL" },
        { "field": "company",  "op": "eq", "data": "xyz,zyx" }
    ]
}

此外,免费的 jqGrid 允许将默认的逗号分隔符(可能包含在某些公司名称中)替换为 jqGrid 选项定义的任何替代符号inFilterSeparator


推荐阅读