Пользовательский фильтр Kendo Grid Установка значения фильтра программно

Я пытаюсь программно установить значение фильтра пользовательского фильтра Kendo Grid. Я применяю свои новые значения фильтра, например:

gridOptions.dataSource.filter = [
    {
      field: 'MyField',
      operator: 'eq',
      value: newTextValue
    }
];

Мое определение поля в параметрах сетки выглядит так:

{
     width: '140px',
     title: 'MyFieldTitle',
     field: 'MyField',
     filterable: getFieldFilter()
}

Со следующим фильтром:

function getFieldFilter() {
  return {
    cell: {
      template: function (args) {
        var element = args.element;

        element.kendoComboBox({
          dataSource: {
            transport: {
              read: 'api/Items'
            }
          },
          valuePrimitive: true,
          dataTextField: 'Description',
          dataValueField: 'Code'
        });
      },
      showOperators: false
    }
  };
}

Если я применю фильтр, как показано выше, он сработает только после того, как я щелкну поле kendoComboBox в столбце и снова щелкну вне его. Моя первоначальная мысль заключалась в том, что сетка кендо не будет применять dataValueField, а просто установит dataTextField. Когда я проверял запросы, которые сетка кендо отправляет на сервер, я увидела, что она отправляет значение, хранящееся в самом kendoComboBox (текст), а не значение, стоящее за ним.

Если я выбираю что-то в kendoComboBox из пользовательского интерфейса, все работает нормально. Но если я установлю его программно, как указано выше, это не так.

Нужно ли обновлять какое-то состояние, чтобы kendoComboBox обновил свое внутреннее значение, или как решить эту проблему?

EDIT: я пытаюсь получить значение kendoCombobox из сетки.

var currentlyAppliedFilters = grid.dataSource.filter().filters;
for (var filter of currentlyAppliedFilters) {
    if (filter.field === 'MyField') {
      var currentlyApplied = filter.value;
    }
}

Таким образом, приведенный выше код даст мне свойство Description элементов в kendoCombobox, но на самом деле я хочу получить свойство Code.


person Thomas Gassmann    schedule 04.12.2017    source источник


Ответы (1)


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

например: пример dojo с optionLabel

 args.element.kendoDropDownList({
                                dataSource: args.dataSource,
                                optionLabel: "Select a color...",
                                dataTextField: "color",
                                dataValueField: "color",
                                valuePrimitive: true
                            });

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

например: пример dojo с фильтром источника данных

 dataSource: { 
          data:[ { color: "#ff0000", size: 30 }, { color: "#000000", size: 33 }] ,
          filter: { field: "color", operator: "eq", value: "#ff0000" }
                    }

Надеюсь это поможет.

person cwishva    schedule 05.12.2017
comment
В моем случае это кажется другим, либо потому, что я использую разные dataTextField и dataValueField, либо потому, что у меня есть kendoDropDownList с вводом текста. - person Thomas Gassmann; 07.12.2017