对Kendo数据源进行复杂过滤

时间:2015-01-28 17:22:50

标签: javascript kendo-ui telerik kendo-grid

我有一些剑道网格和调度程序,我想应用一个复杂的过滤器,如((A或B或C)和(D或E))。如果过滤器很简单,比如(A或B或C),一切都还可以,但是对于第一个提到的复杂类型的过滤器,我无法实现它。

以下是我的尝试:

function filterByTechnicalAndStatus() {
    var allFilters = [];
    var technicalFilters = { logic: "or", filters: [] };
    var statusFilters = { logic: "or", filters: [] };
    var scheduler = $("#scheduler").data("kendoScheduler");
    var userGrid = $("#userGrid").data("kendoGrid");
    var selectedUsers = userGrid.select();
    if (selectedUsers.length != 0) {
        for (var i = 0; i < selectedUsers.length; i++) {
            var code = userGrid.dataItem(selectedUsers[i]).Code;
            technicalFilters.filters.push({ field: "Technical", operator: "eq", value: code });
        }
    }
    if ($('#chk_PL').prop('checked')) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "PL" });
    }
    if ($('#chk_OPEN').prop('checked')) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "OPEN" });
    }
    if ($('#chk_EXEC').prop('checked');) {
        statusFilters.filters.push({ field: "InspectionStatusCode", operator: "eq", value: "EXEC" });
    }

    allFilters.push(statusFilters);
    allFilters.push(technicalFilters);

    scheduler.dataSource.filter(
        [
            { "logic": "or",
                "filters": [
                            { "field": "InspectionStatusCode", "operator": "eq", "value": "PL" },
                            { "field": "InspectionStatusCode", "operator": "eq", "value": "OPEN" }
                            ]
            },
            { "logic": "or",
                "filters": [
                            { "field": "Technical", "operator": "eq", "value": "PSOARES" },
                            { "field": "Technical", "operator": "eq", "value": "ASOARES" }
                            ]
            }
        ]
    );
    //scheduler.dataSource.filter(allFilters);
    }

在上述功能结束时,我已经scheduler.dataSource.filter设置&#34;手动&#34;并在评论行的下方。手动设置按预期工作:但是,我不想这样做&#34;手动&#34;,显然。

注释行是我期望正常工作但会中断并打开kendo.all.min.js文件并出现语法错误警告。

我找到了thisthis,但无法克服我的问题。如何设置除#34;手动&#34;?

以外的复杂滤波器

1 个答案:

答案 0 :(得分:4)

尝试做:

ds.filter([
    {
        "logic":"and",
        "filters":[
            {
                "logic":"or",
                "filters":[
                    // Your A condition
                    { "field": "InspectionStatusCode", "operator": "eq", "value": "PL" },
                    // Your B condition
                    { "field": "InspectionStatusCode", "operator": "eq", "value": "OPEN" }
                    {
                        // Your C condition
                    }
                ]
            },
            {
                "logic":"or",
                "filters":[
                    {
                        // Your D condition
                    },
                    {
                        // Your E condition
                    }
               ]
            }
        ]
    }
]);

即。写一个带登录的第一个过滤器&#34; AND&#34;其中包含两个过滤器。这些过滤器中的每一个都具有&#34; OR&#34;过滤您想要的条件。

请记住:

enter image description here