我在更新行后尝试保留网格过滤器。
当我点击网格中的一行时,我打开一个对话框,在这里我更新了这一行的信息,然后我在网格的rowData中查找单击的行,之后我更新了相应的记录。 rowData包含对话框中的值,如下所示:
row[0].x = dg.x;
row[0].y = dg.y;
dg.gridOptions.rowData[index] = row[0];
dg.gridOptions.api.setRowData(newRows);
但在此之后我松开网格上的过滤器,我做了一些搜索,我尝试了以下所有解决方案:
将gridOptions
属性deltaRowDataMode
设置为true
。
filterParams: {apply: true, newRowsAction: 'keep'}
但这些都没有奏效。
我该如何解决这个问题?
答案 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)
我遇到了同样的问题,这就是我要解决的问题(有点怪异)。
(rowDataChanged)="onRowDataChanged($event)"
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();
}