在ag-grid中更新行数据时,列过滤器丢失

时间:2017-07-13 11:22:26

标签: ag-grid

我正在尝试在ag-grid中预先配置一个列过滤器,一个简单的文本“equals”过滤器只显示与某些指定文本匹配的行,我的工作正常。

但是,只要我用一组新行替换模型数据,我的过滤器就会消失。

我尝试过两种方式更新我的模型数据:

  • 通过替换绑定的rowData属性的值(我正在使用Vue.js)
  • 调用api.setRowData(newRows)

这两个都会导致列过滤器丢失。

有没有办法在不丢失列过滤器的情况下更新模型数据?

2 个答案:

答案 0 :(得分:5)

documentation中,它表示您可以设置gridOptions属性deltaRowDataMode=true,然后使用api.setRowData(newRows)。这会将当前行数据与新数据进行比较,以查看已更改的内容并进行相应更新。如果没有设置此属性,网格将删除所有设置以确保重新开始。

答案 1 :(得分:1)

我遇到了同样的问题,这是您可以在行数据更新后继续应用数据过滤器。

  1. 订阅ag网格的rowDataChanged事件。
(rowDataChanged)="onRowDataChanged($event)"
  1. onRowDataChanged内放置过滤逻辑
// Get a reference to the name filter instance
const filterInstance = this.gridApi.getFilterInstance('fieldNameHere');
// Call some methods on Set Filter API that don't apply the filter
filterInstance.setModel({
    type: 'contains', // type of filter
    filter: 'yourData' // set filter on data
});
// Get grid to run filter operation again
this.gridApi.onFilterChanged();

onRowDataChanged将被触发两次,第一次是在网格清除所有内容时,第二次是在重新加载数据时。因此,您应该设置一些条件以避免任何错误。

例如,我需要从刷新后加载的数据中设置过滤器,这就是我所做的:

const filtered = this.rowData.filter(x => x.Id === this.Id);
if (filtered.length > 0) {
    // Get a reference to the name filter instance
    const filterInstance = this.gridApi.getFilterInstance('fieldNameHere');
    // Call some methods on Set Filter API that don't apply the filter
    filterInstance.setModel({
        type: 'contains', // type of filter
        filter: filtered[0].name // set filter on data
    });
    // Get grid to run filter operation again
    this.gridApi.onFilterChanged();
}