如何为Server Side Row Model的中间分组行生成RowId?
如何在AG Grid Server Side Row Model中获取分组行的对应分组字段
要给SSR模式下的分组行生成唯一可确定的ID,核心是通过分组行的层级信息关联到对应的分组字段,以下是几种实用方法:
1. 基于固定分组列顺序匹配层级
如果你的分组列是预先定义好的(比如固定按Status、Category顺序分组),可以直接通过分组行的level属性,对应到分组列数组的索引:
// 预先定义的分组列顺序 const fixedRowGroupCols = ['Status', 'Category']; const getRowId = (params) => { // 判断当前行是分组行 if (params.node.group) { // 用层级取对应的分组字段 const currentGroupField = fixedRowGroupCols[params.node.level]; // 结合父分组路径+当前分组值生成唯一ID const parentKeyPrefix = params.node.parent ? `${params.node.parent.key}_` : ''; return `group_${currentGroupField}_${parentKeyPrefix}${params.node.key}`; } // 普通数据行的ID生成逻辑 return `data_${params.data.id}`; };
这种方法简单直接,适合分组列固定的场景,生成的ID格式清晰(比如group_Status_NEW、group_Category_Electronics_Status_IN_PROGRESS),方便后续定位。
2. 动态获取分组列配置
如果分组列是动态调整的(比如用户可以切换分组维度),可以通过AG Grid API的getRowGroupColumns()方法实时获取当前生效的分组列,再结合层级匹配:
const getRowId = (params) => { if (params.node.group) { // 动态获取当前所有分组列 const currentRowGroupCols = params.api.getRowGroupColumns(); // 取当前层级对应的分组字段(注意列定义中用field还是colId,根据你的配置调整) const currentGroupField = currentRowGroupCols[params.node.level].field; // 用完整分组路径生成ID,确保唯一性 const fullGroupPath = [...(params.node.path || [])].join('_'); return `group_${currentGroupField}_${fullGroupPath}`; } return `data_${params.data.id}`; };
params.node.path是AG Grid提供的分组路径数组,包含从根分组到当前分组的所有key值,结合分组字段生成的ID能保证全局唯一。
关键注意点
- 必须先通过
params.node.group判断当前行是分组行,避免和普通数据行的ID生成逻辑冲突; - 生成的ID建议带上
group_前缀,方便后续区分分组行和数据行; - 如果分组字段存在编码与显示值不一致的情况(比如Status的编码是1,显示为NEW),可以提前维护映射表,用编码作为ID的一部分,保证ID的稳定性。
内容的提问来源于stack exchange,提问作者Ryan Pierce Williams
相关产品推荐
相关产品推荐

