Kendo Grid过滤器使用复选框和多个选项

时间:2018-02-12 18:29:16

标签: kendo-ui kendo-grid

我正在使用自定义多选代码来过滤列。目前我可以根据一个选项进行过滤,但无法根据多个值进行过滤。我需要逻辑来读取,如果选中任何选中的复选框,则显示网格中的选择。我现在写它的方式,它过滤每一个,但如果其中一个选择是假的,它将从网格中删除它,即使其中一个选择为真。

var filter = dataSource.filter() || { logic: "or", filters: [] };
            var fieldFilters = $.map(element.find(":checkbox:checked"), function (input) {
                return {
                    field: field,
                    operator: "eq",
                    value: input.value
                };
            });
            if (fieldFilters.length) {
                removeFiltersForField(filter, field);
                filter.filters.push({
                    logic: "or",
                    filters: fieldFilters
                });
                var filterType = filter.filters[0].filters;
                if (filter.filters[0].filters.length > 1) {
                    var filterLogic = { logic: "or", filters: filter.filters };
                    dataSource.filter(filterLogic.filters[0]);
                } else {
                    dataSource.filter(filterType); // This works, but its only one selection
                }

            }

如果任何选择为真,我需要它返回并忽略那些假的。目前,它按顺序排列,所以如果第一个选择为true,它会在网格中显示它,但如果下一个选择为false,则将其从网格中删除。

1 个答案:

答案 0 :(得分:0)

好的,我能做到这一点。如果某人有更有效的方法,请在此处添加。目前,这有效:

var multipleFilters = [];
                if (filterType.length > 1) {
                    $(filterType).each(function (i, value) {
                        var simpleFilter = { field: value.field, operator: value.operator, value: value.value };
                        multipleFilters.push(simpleFilter);
                    })
                    if (multipleFilters == 2) {
                        dataSource.filter(multipleFilters[0] || multipleFilters[1]);
                    } else if (multipleFilters == 3) {
                        dataSource.filter(multipleFilters[0] || multipleFilters[1] || multipleFilters[2]);
                    } else {
                        dataSource.filter(multipleFilters[1] || multipleFilters[2] || multipleFilters[3]);
                    }
                } else {
                    dataSource.filter(filterType);
                }