运行时期间applyfilter似乎无法正确过滤数据

时间:2018-12-11 16:31:25

标签: angular typescript jqxgrid jqxwidgets

我正在使用jqxgrid,需要实现过滤。我注意到它具有过滤功能,因此我正在研究如何利用现有工具。供参考:https://www.jqwidgets.com/angular-components-documentation/documentation/jqxgrid/angular-grid-filtering.htm?search=

因此,我实现了一个带有触发事件的按钮的输入框:filterClick()并正确获取正确的数据以创建和应用过滤器:

信息:isFilterSet是一个布尔值,分配给jqxGrid的可过滤字段。        网格是对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();
}

我注销了信息,但是网格本身似乎没有更新。

我在做错什么吗?网格本身没有更新,但是我一直在跟进,没有看到任何跳出来的东西。我还尝试将filtergroup的实例化移动到数组内部,以防可能它不喜欢共享对象。

我没有错误

1 个答案:

答案 0 :(得分:0)

由于无法执行此操作,因此我通过保留数据副本自行处理筛选,但使用新的数组更新dataadapter,这将触发onchange。

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);
  }