Kendo 数据源的复杂过滤
Complex filtering on Kendo Datasources
我有一些 Kendo 网格和调度程序,我想应用一个复杂的过滤器,例如((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
设置 "manually" 并在注释行下方。手动设置按预期工作:但是,显然我不想这样做 "manually"。
注释行是我期望的正常工作但中断并打开 kendo.all.min.js
文件并显示语法错误警报。
尝试做:
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
}
]
}
]
}
]);
即使用 login "AND" 编写第一个过滤器,其中包含两个过滤器。这些过滤器中的每一个都具有 "OR" 符合您想要的条件的过滤器。
记住:
我有一些 Kendo 网格和调度程序,我想应用一个复杂的过滤器,例如((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
设置 "manually" 并在注释行下方。手动设置按预期工作:但是,显然我不想这样做 "manually"。
注释行是我期望的正常工作但中断并打开 kendo.all.min.js
文件并显示语法错误警报。
尝试做:
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
}
]
}
]
}
]);
即使用 login "AND" 编写第一个过滤器,其中包含两个过滤器。这些过滤器中的每一个都具有 "OR" 符合您想要的条件的过滤器。
记住: