ag grid:获取已排序的选定行



我有一个带过滤和排序的ag网格,并启用了多行选择。文档提供了一种方法(getSelectedRows()(,用于获取选定的行,但仅用于未排序的行。有没有其他方法可以用当前排序获得行,而不必再次对数据进行排序?

// template
<ag-grid-angular
class="ag-theme-alpine data-grid" 
[getRowId]="getRowId"
[columnDefs]="columnDefs"
[columnTypes]="columnTypes"
[defaultColDef]="defaultColDef"
[rowModelType]="rowModelType"
[serverSideInfiniteScroll]="true"
[pagination]="true"
[paginationPageSize]="paginationPageSize"
[cacheBlockSize]="cacheBlockSize"
[maxBlocksInCache]="maxBlocksInCache"
[editType]="editType"
[rowSelection]="'multiple'"
(selectionChanged)="onSelectionChanged()"
(gridReady)="onGridReady($event)"
(modelUpdated)="onModelUpdated($event)"
(rowValueChanged)="onRowValueChanged($event)"
></ag-grid-angular>
// typescript
onSelectionChanged() {
console.log("selected", this.gridApi.getSelectedRows()); // this prints the unsorted data, even when sorting is applied
}

我这样解决了它:

onSelectionChanged() {
const selectedRows = this.gridApi.getSelectedNodes();
const selectedSortedRows: any[] = [];
this.gridApi.forEachNode((node, index) => {
const row = selectedRows.find(row => row.id == node.id)?.data;
if(row){
selectedSortedRows.push(row);
}
})
console.log(selectedSortedRows);
}

由于嵌套的循环,这并不完美,我将把它留在这里,直到发布更好的答案

另一种方法是使用EachNodeAfterFilterAndSort

getSelectedRowNodesWithSort() {
let selectedRowNodesWithSort = [];
this.gridApi.forEachNodeAfterFilterAndSort((node) => {
if (node.selected) {
selectedRowNodesWithSort.push(node);
}
});
console.log(selectedRowNodesWithSort);
}

最新更新