applyfilter во время выполнения, кажется, неправильно фильтрует данные - PullRequest
0 голосов
/ 11 декабря 2018

Я использую jqxgrid и мне нужно было реализовать фильтрацию.Я заметил, что у него была фильтрация, поэтому я изучал, как я мог бы использовать уже существующие инструменты.Для справки: https://www.jqwidgets.com/angular-components-documentation/documentation/jqxgrid/angular-grid-filtering.htm?search=

Поэтому я реализую поле ввода с помощью кнопки, которая запускает событие: filterClick (), и правильно получаю правильные данные для создания и применения фильтра:

Информация: isFilterSet - это bool, назначенный фильтруемому полю jqxGrid.grid - ссылка на jqxgrid filterText - ссылка на поле ввода

filterClicked(): void {
  let filtergroup = new jqx.filter();
  let filter_or_operator = "or";
  let filterCondition = "contains";
  let filterValue = this.filterText.nativeElement.value;  //confirmed.
  let f = filter.createfilter("stringfilter", filterValue, filterCondition);

  for (let col in this.datafields){
     // confirmed col.name == columnname
     this.grid.addfilter(col.name, filter);
  }

  this.isFilterSet = true;
  this.grid.applyfilters();
}

Я вышла из системы, но сама сетка, похоже, не обновляется.

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

Я не получаю ошибок

1 Ответ

0 голосов
/ 11 декабря 2018

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

setDataAdapter () : void {
    // this.data is the base array object containing all info
    let filterValue : string = "";
    if (this.filterText) filterValue = this.filterText.nativeElement.value;
    let reg = RegExp(filterValue, "ig");

    let src: any =
    {
      // if the input is empty, then it would just use data, otherwise it would filter.   My filter is only filtering strings, is case inspecific and tests the entire string.
      localdata: filterValue == "" ? this.data : this.data.filter( row => {
        for ( let key of Object.keys(row)){
          let content = row[key];
          if (typeof content === "string" && reg.test(content)){
            return true;
          }
        }
        return false;
      }),
      datatype: 'array',
      datafields: this.dataFields
    };

    this.grid.clearselection();
    this.dataAdapter = new jqx.dataAdapter(src);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...