如何在ag-grid中按分组行数对分组列进行排序?
ag-Grid 按分组子行数量排序实现方案
ag-Grid 原生支持按各分组对应的子行数量对分组列排序,无需修改框架源码,按以下配置即可实现目标效果:
核心实现步骤
- 第一步:为分组字段添加计数聚合配置
对需要开启分组的列,配置aggFunc: 'count',Grid会自动统计每个分组节点下的子行总数,统计结果会挂载在分组节点的aggData属性下。
基础列定义示例:const columnDefs = [ { field: 'category', // 替换为你实际用于分组的字段名 rowGroup: true, hide: true, // 使用自动分组列时可隐藏原始分组字段 aggFunc: 'count' }, // 其余业务列配置 ]; - 第二步:配置分组列排序比较逻辑
如果你使用Grid默认生成的自动分组列,在autoGroupColumnDef中添加comparator排序规则,直接读取分组节点的计数聚合值做对比即可:
如果你使用的是自定义分组列,只需要把上述const gridOptions = { columnDefs: columnDefs, autoGroupColumnDef: { headerName: '分类', // 按分组子行数排序的核心比较逻辑 comparator: (valA, valB, nodeA, nodeB) => { const rowCountA = nodeA.aggData?.category?.count ?? 0; const rowCountB = nodeB.aggData?.category?.count ?? 0; return rowCountA - rowCountB; } }, rowGroupPanelShow: 'always', groupDefaultExpanded: 1 };comparator逻辑写到自定义分组列的列定义中即可。
扩展配置
如果需要页面加载后默认按分组子行数倒序排列(即分组行数多的排在最前面),添加初始排序模型配置即可:
const gridOptions = { // 其余配置... defaultSortModel: [ { colId: 'ag-Grid-AutoColumn', sort: 'desc' } ] }
注意:
ag-Grid-AutoColumn是自动生成分组列的默认colId,如果你使用自定义分组列,替换为你自定义列的colId即可。
实现后的预期效果如下:
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

