Фильтровать 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
},

но этот поиск не работает. пожалуйста помоги

1 ответ

Похоже, у вас ошибка в последнем "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, которую вы используете (можете использовать) и разветвление ( бесплатную jqGrid, коммерческую версию Guriddo jqGrid JS или старую версию jqGrid в версии <=4.7).

Если вы действительно используете "бесплатный jqGrid" (не старый jqGrid в версии <=4.7), то вы можете использовать "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,

Другие вопросы по тегам