Я создал собственное всплывающее окно, которое содержит 4 элемента управления Kendo Multi Select и одну кнопку «Применить». Когда я нажимаю кнопку «Применить», выбранное значение следует использовать в кендогриде и фильтровать результат. Каждый раз, когда я открываю всплывающее окно, и каждый раз, когда одни и те же фильтры добавляются в запрос odata kendogrid, даже если я удаляю значение из элементов управления множественным выбором.
Я попытался удалить фильтры из фильтров источника данных сетки кендо, если они уже есть. Но я не могу этого сделать, потому что элементы управления kendo множественный выбор дают мне массив значений, и когда мы добавляем эти значения в фильтры, он создает группу фильтров
приведенный ниже код вызывается при нажатии кнопки «Применить» из всплывающего окна
var filter = { logic: "AND", filters: [] };
var controllerValue = $("#controller").data("kendoMultiSelect").dataItems();
var reconciledByValue = $("#reconciledBy").data("kendoMultiSelect").dataItems();
var reviewedByValue = $("#reviewedBy").data("kendoMultiSelect").dataItems();
var approvedByValue = $("#approvedBy").data("kendoMultiSelect").dataItems();
if (controllerValue.length > 0) {
filter.filters.push(createFilterGroup(controllerValue, "OR", "Controller"));
}
if (reconciledByValue.length > 0) {
filter.filters.push(createFilterGroup(reconciledByValue, "OR", "ReconciledByA"));
}
if (reviewedByValue.length > 0) {
filter.filters.push(createFilterGroup(reviewedByValue, "OR", "ReviewedByA"));
}
if (approvedByValue.length > 0) {
filter.filters.push(createFilterGroup(approvedByValue, "OR", "ApprovedByA"));
}
if (filter.filters.length > 0) {
var gridDatasource = $("#" + gridid).data("kendoGrid").dataSource;
var allFilters = [];
allFilters = gridDatasource.filter().filters; //previous filters
allFilters.push(filter); //Add filters
gridDatasource.filter(allFilters);
}
function createFilterGroup(filterData, operator, field) {
var filterGroup = {
logic: operator,
filters: []
};
$.each(filterData, function (key, value) {
filterGroup.filters.push({ field: field, operator: "eq", value: value[field] });
});
return filterGroup;
}
I expect the output of odata query to remove already added filter condition first and than add new condition
below URL contains Controller+eq+%27denekewj%27+OR+Controller+eq+%27jabbott%27
in the first search
https://localhost:44335/odata/UserReconciliationAccounts/GetDistinctRoleCountForAccountBase?%24format=json&%24top=50&%24filter=((((FiscalYear+lt+2019+OR+(FiscalPeriod+lt+8+AND+FiscalYear+eq+2019))+AND+(IsReconLateAndIncomplete+eq+true+OR+IsReviewLateAndIncomplete+eq+true+OR+IsApprovalLateAndIncomplete+eq+true))+OR+(FiscalPeriod+eq+8+AND+FiscalYear+eq+2019))+and+(Controller+eq+%27denekewj%27+OR+Controller+eq+%27jabbott%27))&%24count=true
next time if I remove one controller value than query is forming like below
https://localhost:44335/odata/UserReconciliationAccounts/GetDistinctRoleCountForAccountBase?%24format=json&%24top=50&%24filter=((((FiscalYear+lt+2019+OR+(FiscalPeriod+lt+8+AND+FiscalYear+eq+2019))+AND+(IsReconLateAndIncomplete+eq+true+OR+IsReviewLateAndIncomplete+eq+true+OR+IsApprovalLateAndIncomplete+eq+true))+OR+(FiscalPeriod+eq+8+AND+FiscalYear+eq+2019))+and+(Controller+eq+%27denekewj%27+OR+Controller+eq+%27jabbott%27)+and+Controller+eq+%27jabbott%27)&%24count=true
Now I remove all conroller value from kendo multiselect and added value in other multiselect than below query formed
https://localhost:44335/odata/UserReconciliationAccounts/GetDistinctRoleCountForAccountBase?%24format=json&%24top=50&%24filter=((((FiscalYear+lt+2019+OR+(FiscalPeriod+lt+8+AND+FiscalYear+eq+2019))+AND+(IsReconLateAndIncomplete+eq+true+OR+IsReviewLateAndIncomplete+eq+true+OR+IsApprovalLateAndIncomplete+eq+true))+OR+(FiscalPeriod+eq+8+AND+FiscalYear+eq+2019))+and+(Controller+eq+%27denekewj%27+OR+Controller+eq+%27jabbott%27)+and+Controller+eq+%27jabbott%27+and+ReconciledByA+eq+%27sihuda%27)&%24count=true