0
我有一个网格包含工具栏中的三个多选控件,用于根据所做的选择过滤网格数据源。 自定义筛选多选下拉列表
目前,我有以下功能,在任何多选控件中的change
事件中触发。此功能接受values
,其中包含已更改的多重选择控件中的选定项目和filterID
,这是在过滤期间要使用的field
名称。
function applyClientFilters(values, filterID) {
var grid = $("#grid").data("kendoGrid");
var gridDataSource = grid.dataSource;
var filter = gridDataSource.filter();
// does the selected drop down contain a value
// if yes, then apply this filter to the necessary drop down
// otherwise remove the filter
if (values.length > 0) {
// has a filter been setup yet on the datasource?
if (filter && filter.filters.length > 0) {
// firstly check to see if filter has already been applied and if so remove
for (var i = 0; i < filter.filters.length; ++i) {
// check to see if filter field already exists i.e. analyte has already been filtered
// and check to see if the value at this field already exists as a filtered item
if (filter.filters[i].field === filterID && values.indexOf(filter.filters[i].value) > -1) {
filter.filters.splice(i, 1);
}
}
// apply new filter(s)
for (var i = 0; i < values.length; ++i) {
filter.filters.push({ field: filterID, operator: "eq", value: parseInt(values[i]) });
}
gridDataSource.query({
filter: filter,
pageSize: 10,
page: 1,
group: [{
field: "InstrumentName",
dir: "asc"
}, {
field: "AnalyteName",
dir: "asc"
}, {
field: "MethodName",
dir: "asc"
}]
});
}
else {
// apply new filter
gridDataSource.filter({
logic: "or",
filters: [
{
field: filterID,
operator: "eq",
value: parseInt(values),
}
]
});
}
} else {
if (filter && filter.filters.length > 0) {
// remove existing filter
for (var i = 0; i < filter.filters.length; ++i) {
if (filter.filters[i].field === filterID) {
filter.filters.splice(i, 1);
}
}
gridDataSource.query({
filter: filter,
pageSize: 10,
page: 1,
group: [{
field: "InstrumentName",
dir: "asc"
}, {
field: "AnalyteName",
dir: "asc"
}, {
field: "MethodName",
dir: "asc"
}]
});
}
}
}
仅使用or
逻辑过滤时是精细与单独的多选选择即选择多种方法将过滤他们预期。但是,跨多个不同的多选控件使用时,该逻辑需要为and
。
例
- 选择 '分析物A' - >的过滤器网格的数据源只显示 '分析物A'
- 选择 '方法A' - >的过滤器网格的数据源,以显示 '分析物A' 和 '方法A'
- 选择 '方法B' - >的过滤器网格的数据源,以显示 '分析物A' 和 '方法A' 或 'B方法'
是否可以将过滤器逻辑运算符与Kendo数据源过滤结合起来以实现上述场景?