Ag Grid使用复杂对象分组:需按ID+Category区分分组但显示GroupName的解决方案咨询
解决Ag Grid复杂对象分组:按组合键区分分组,同时显示指定字段
我刚好遇到过类似的需求,核心要解决的就是分组逻辑用唯一标识(id+category),但分组行显示友好名称(group.name),给你两个关键步骤就能搞定:
1. 用组合键作为分组的唯一标识
你之前的keyCreator只返回了group.name,这才导致同名称的不同group被合并。现在把keyCreator改成返回id和category的拼接值,这样即使名称相同,只要id或category不一样,就会被识别为不同分组:
// 在你的group列定义里修改keyCreator { field: 'group', rowGroup: true, hide: true, keyCreator: params => `${params.value.id}-${params.value.category}` }
这个拼接字符串会作为分组的唯一key,彻底避免误合并的问题。
2. 自定义分组行的显示文本
现在分组的逻辑是对的,但分组行默认会显示我们刚才拼接的id-category字符串,这显然不友好。接下来通过autoGroupColumnDef来定制分组行的显示内容,让它展示group.name:
// 在gridOptions里配置autoGroupColumnDef autoGroupColumnDef: { headerName: '分组名称', // 自定义列头 cellRendererParams: { innerRenderer: params => { // 从行数据里直接取group.name return params.data.group.name; } } }
如果是多层分组的场景,params.data可能不存在,这时候可以通过params.node获取叶子节点的数据来拿到group.name:
innerRenderer: params => { // 取第一个叶子节点的group.name return params.node.allLeafChildren[0].data.group.name; }
完整配置示例
给你一个可直接参考的完整grid配置:
const gridOptions = { rowData: [ { id: '123', name: 'dummy1', category: 'A', group: { name: 'dummyGroup', id: '456', category: 'A' } }, { id: '124', name: 'dummy2', category: 'A', group: { name: 'dummyGroup', id: '457', category: 'A' } }, { id: '125', name: 'dummy3', category: 'B', group: { name: 'dummyGroup', id: '456', category: 'B' } } ], columnDefs: [ { field: 'name', headerName: '名称' }, { field: 'group', rowGroup: true, hide: true, keyCreator: params => `${params.value.id}-${params.value.category}` } ], autoGroupColumnDef: { headerName: '分组', cellRendererParams: { innerRenderer: params => params.data.group.name } } };
这个例子里的三个行数据,前两个group.name相同但id不同,第三个group.id相同但category不同,最终会被分成三个独立的分组,每个分组行都显示dummyGroup,完全符合你的需求。
内容的提问来源于stack exchange,提问作者zze159753
相关产品推荐
相关产品推荐

