jqxGrid 无法使用“addfilter”功能自定义派生列过滤器

问题描述 投票:0回答:1

使用 jQxGrid,
我正在尝试组合列

firstname
lastname
,这样,如果用户在
name
上进行筛选,它实际上会搜索
firstname
lastname

最终
'updatebounddata'
会将这些信息发送到服务器,我可以根据
datafields
返回适当的值,但是过滤器的
datafields
需要变成
firstname
lastname

在下面的示例中,我希望一旦

const ex
过滤器更新为
const ex1
name
过滤器,
firstname
lastname
将具有不同的值。

但没有发生任何更新。 :/

(这是基于他们论坛上的现有帖子,但我无法在那里注册,也不知道还能去哪里..)

HTML:

<div id='jqxWidget'>
  <div id="jqxgrid"></div>
</div>

Javascript:

var data = generatedata(500);

var source = {
  localdata: data,
  datafields: [
    {
      name: "firstname",
      type: "string"
    },
    {
      name: "lastname",
      type: "string"
    },
    {
      name: "name",
      type: "string",
      map: "firstname, lastname"
    }
  ],
  datatype: "array",
  beforeLoadComplete: function (records) {
    const data = new Array();

    for (var i = 0; i < records.length; i++) {
      const current = records[i];
      current.name = `${current.firstname} ${current.lastname}`;
      data.push(current);
    }

    return data;
  },
  filter: function (filters, b, c) {
    updateFilters();
  }
};

var adapter = new $.jqx.dataAdapter(source);

$("#jqxgrid").jqxGrid({
  width: "100%",
  theme: "energyblue",
  source: adapter,
  filterable: true,
  showfilterrow: true,
  columns: [
    {
      text: "Name",
      datafield: "name",
      columngroup: "Name",
      width: 1190
    }
  ]
});

function updateFilters() {

  // Take snapshot of active filters
  debugger;

  const ex = $("#jqxgrid").jqxGrid("getfilterinformation");

  if (ex.length > 1) {
    $("#jqxgrid").jqxGrid("updatebounddata");
  } else {
    const activeFilters = [];

    $.each(
      $("#jqxgrid").jqxGrid("getfilterinformation"),
      (index, filterInfo) => {
        if (filterInfo.datafield === "name") {
          let value = filterInfo.filter.filtervalue
            ? filterInfo.filter.filtervalue
            : filterInfo.filter.getfilters()[0].value;

          let condition = filterInfo.filter.filtervalue
            ? filterInfo.filter.comparisonoperator
            : filterInfo.filter.getfilters()[0].condition;

          activeFilters.push({
            columnName: "firstname",
            filterValue: value.toLowerCase(),
            filterCondition: condition.toLowerCase()
          });

          activeFilters.push({
            columnName: "lastname",
            filterValue: value.toLowerCase(),
            filterCondition: condition.toLowerCase()
          });
        }
      }
    );

    //$("#jqxgrid").jqxGrid("clearfilters");
    // $("#jqxgrid").jqxGrid("removefilter", 'name');

    // Update bound data / reset init row etc

    // Reapply filters
    activeFilters.forEach((filter) => {
      const filtergroup = new $.jqx.filter();
      filtergroup.operator = "or";
      const filtervalue = filter.filterValue;
      const filtercondition = filter.filterCondition;
      const filter1 = filtergroup.createfilter(
        "stringfilter",
        filtervalue,
        filtercondition
      );

      filtergroup.addfilter(1, filter1);
      $("#jqxgrid").jqxGrid("addfilter", filter.columnName, filtergroup);
    });

    const ex1 = $("#jqxgrid").jqxGrid("getfilterinformation");

    $("#jqxgrid").jqxGrid("updatebounddata");

    //$("#jqxgrid").jqxGrid("refreshfilterrow");
  }
}
javascript jquery filtering jqxgrid jqxwidgets
1个回答
0
投票

这似乎适用于 jQXWidgets v19。

const ex
const ex1
的值不同。

这可能是我使用的 jqxWidgets 库(v12)中的一个错误。

我认为该错误与:-

https://www.jqwidgets.com/community/topic/filtering-issues-when-mixing-addfilter-and-filter-row/

© www.soinside.com 2019 - 2024. All rights reserved.