AgGrid企业版:基于行分组展开层级显隐列的实现咨询
解决方案:基于分组展开状态动态控制列显示
针对AgGrid企业版SSRM行模型下的分组层级列显示需求,可通过监听分组展开/折叠事件+数据模型更新事件,结合网格节点的层级/分组状态判断,动态控制列的可见性,具体实现如下:
1. 初始列配置:默认隐藏目标列
在列定义中设置Pin Code列默认隐藏,仅在满足条件时显示:
const columnDefs = [ // 其他分组列与数据列定义 { field: 'planet', rowGroup: true, hide: true }, { field: 'continent', rowGroup: true, hide: true }, { field: 'country', rowGroup: true, hide: true }, { field: 'state', rowGroup: true, hide: true }, { field: 'district', rowGroup: true, hide: true }, // 目标列默认隐藏 { field: 'pinCode', headerName: 'Pin Code', hide: true } ];
2. 核心判断逻辑:检查是否显示目标层级
编写函数判断当前网格中是否存在District层级的可见行(或是否有State分组被展开):
function shouldShowPinCode(gridApi) { const displayedNodes = gridApi.getAllDisplayedNodes(); // 方式1:通过节点深度判断(假设District层级深度为5,根节点深度0) return displayedNodes.some(node => node.level === 5); // 方式2:通过分组字段判断(判断是否有State分组被展开) // return displayedNodes.some(node => node.group && node.field === 'state' && node.expanded); }
两种方式二选一:方式1更直接(只要有District行可见就显示列),方式2更贴合“展开State才显示”的逻辑。
3. 监听事件并更新列可见性
在网格配置中监听onGroupExpandOrCollapse(分组展开/折叠)和onModelUpdated(SSRM数据加载完成)事件,触发列可见性更新:
const gridOptions = { columnDefs, rowGroupPanelShow: 'always', groupDefaultExpanded: -1, // 默认全部折叠 serverSideRowModel: true, // 分组展开/折叠时更新列状态 onGroupExpandOrCollapse: (params) => { const visible = shouldShowPinCode(params.api); params.api.columnApi.setColumnVisible('pinCode', visible); }, // SSRM数据加载完成后重新判断(避免展开分组后数据未加载导致判断错误) onModelUpdated: (params) => { const visible = shouldShowPinCode(params.api); params.api.columnApi.setColumnVisible('pinCode', visible); } };
关键说明
- 必须监听
onModelUpdated:SSRM是异步加载数据,展开分组后数据不会立即出现在网格中,需等数据加载完成(模型更新)后再判断列的显示状态。 - 节点层级计算:根节点(未分组)深度为0,每多一层分组深度加1,可根据自身分组结构调整
node.level的判断值。 - 多分组场景适配:如果存在多个
State分组,只要有一个被展开,Pin Code列就会显示;当所有State分组都折叠时,列自动隐藏。
内容的提问来源于stack exchange,提问作者Soumya Sharma
相关产品推荐
相关产品推荐

