Сбросить источник данных флажка kendo Multi filter для отражения отфильтрованных данных

Я пытаюсь отфильтровать источник данных по нескольким полям. У меня есть опция флажка Kendo Multi filter в моей сетке. Я инициализирую каждый мультифильтр Kendo для каждого столбца.

После этого я применяю фильтр, используя такую ​​функцию javascipt, и устанавливаю данные сетки как отфильтрованные.

function filterGrid() {
    var grid = $("#grid").data('kendoGrid');
    var filter = [];
    filter.push({ field: "ratingPlace", operator: "startswith", value: "US" });
    grid.dataSource.filter(filter);
    grid.dataSource.data(grid.dataSource.view());
}

Таким образом, функция применяет фильтр к сетке. Теперь, когда я выбираю опцию мультифильтра Kendo, все данные в старом источнике данных появляются в списке фильтров.

Как мне этого избежать? Мне нужно, чтобы только отфильтрованные данные были доступны только в отфильтрованном списке, а не во всех элементах dataSource. У меня не возникает этой проблемы, когда я инициализирую фильтр нескольких флажков Kendo после выполнения функции filterGrid (). Есть ли способ повторно инициализировать источник ("kendoFilterMultiCheck") каждого столбца ?? Я приложил пример jsfiddle, чтобы продемонстрировать то же самое.

1) сначала инициализируйте все флажки нескольких фильтров, щелкнув заголовок столбца с исходным источником данных 2) щелкните кнопку фильтра 3) источник данных будет заменен 4) щелкните на множественной проверке фильтра с новым источником данных - старые данные фильтра появятся в списке

http://jsfiddle.net/Sbb5Z/1712/


person renjith    schedule 22.04.2015    source источник
comment
Удалось ли вам найти ответ на этот вопрос? У меня такая же проблема, когда мне нужно обновить мультифильтры ColumnMenu на основе фильтра, выбранного в отдельном столбце   -  person JamesS    schedule 11.02.2020


Ответы (2)


Я предлагаю определить собственный источник данных для флажка с несколькими фильтрами и просто вызвать его метод чтения, чтобы перезагрузить данные.

$("th.k-filterable[data-field='ratingPlace']").data().kendoFilterMultiCheck.checkSource.read();

person den    schedule 30.01.2019

По сути, это настройка решения дается на форумах Telerik и меняет его для использования данных локальной сети, а не отдельного источника данных. Код также сортирует новые данные фильтра (что является моей исходной проблемой).

  function removeDuplicates(items, field) {
     var getter = function (item) { return item[field] };
     var result = [];
     var index = 0;
     var seen = {};

     while (index < items.length) {
        var item = items[index++];
        var text = getter(item);

        if (text !== undefined && text !== null && !seen.hasOwnProperty(text)) {
           result.push(item);
           seen[text] = true;
        }
     }

     return result;
  }

  function onFilterMenuOpen(e) {
     // Refresh and Sort the multi-filter selections
     if (e.field == "ratingPlace") {
        // Build up list of unique values for this column
        var gridView = $("#grid").data("kendoGrid").dataSource.view();
        var uniqueDsResult = removeDuplicates(gridView, e.field);

        // Empty the existing filter and populate with new data
        var filterMultiCheck = this.thead.find("[data-field=" + e.field + "]").data("kendoFilterMultiCheck")
        filterMultiCheck.container.empty();
        filterMultiCheck.checkSource.data(uniqueDsResult.sort());
        filterMultiCheck.createCheckBoxes();
     }
  }
person sonyisda1    schedule 11.08.2020