在ag-grid更新后保持过滤

时间:2018-05-25 16:04:00

标签: javascript angularjs ag-grid

我在更新行后尝试保留网格过滤器。

当我点击网格中的一行时,我打开一个对话框,在这里我更新了这一行的信息,然后我在网格的rowData中查找单击的行,之后我更新了相应的记录。 rowData包含对话框中的值,如下所示:

row[0].x = dg.x;
row[0].y = dg.y;
dg.gridOptions.rowData[index] = row[0];
dg.gridOptions.api.setRowData(newRows);

但在此之后我松开网格上的过滤器,我做了一些搜索,我尝试了以下所有解决方案:

  1. gridOptions属性deltaRowDataMode设置为true

  2. filterParams: {apply: true, newRowsAction: 'keep'}

  3. 但这些都没有奏效。

    我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

使用此方法(gridOptions.api.refreshCells())代替setRowData。或者,如果您需要使用setRowData,请在调用之前保存过滤器模型,然后使用以下方法再次应用过滤器:

const model = this.gridOptions.api.getFilterModel();
//some code
this.gridOptions.api.setFilterModel(model);

答案 1 :(得分:0)

您可以将filterParams newRowsAction设置为保持

dg.defaultColDef = { filterParams: { newRowsAction: 'keep'}} ;

参阅https://www.ag-grid.com/javascript-grid-filtering/index.php

答案 2 :(得分:0)

我遇到了同样的问题,这就是我要解决的问题(有点怪异)。

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