如何在jqGrid中启用部分分组功能?
没问题,我来帮你实现jqGrid的这种「按需分组」需求——只有当groupingId对应的记录数大于1时才显示分组,单条记录直接展示。下面是具体的实现步骤和完整代码:
1. 预处理数据:统计分组ID的记录数
首先我们需要先遍历数据源,统计每个groupingId的出现次数,同时给单条记录的分组ID做特殊标记,让它们成为独立的「隐形分组」:
var data = [ { groupingId: '001', invoice: 1, amount: 5.00 }, { groupingId: '001', invoice: 2, amount: 10.00 }, { groupingId: '002', invoice: 3, amount: 8.00 } ]; var colNames = ['Invoice','Amount']; // 统计每个groupingId的记录数(转成字符串避免数字类型冲突) var groupCount = {}; data.forEach(item => { const key = String(item.groupingId); groupCount[key] = (groupCount[key] || 0) + 1; }); // 给单条记录的groupingId添加唯一后缀,让它们成为独立分组 data.forEach(item => { const key = String(item.groupingId); if (groupCount[key] === 1) { item.groupingId = `${key}_single_${Date.now()}`; } });
2. 配置jqGrid的分组参数
初始化jqGrid时开启分组功能,通过groupingView的自定义配置,让单条记录的分组头完全隐藏,达到「不分组」的视觉效果:
$("#grid").jqGrid({ data: data, datatype: "local", colNames: colNames, colModel: [ { name: 'invoice', width: 150 }, { name: 'amount', width: 150, formatter: 'currency', formatoptions: { prefix: '$', decimalPlaces: 2 } }, { name: 'groupingId', hidden: true } // 隐藏分组列,不展示给用户 ], rowNum: 10, rowList: [10, 20, 30], pager: '#pager', viewrecords: true, caption: "Partial Grouping Demo", // 开启分组功能 grouping: true, groupingView: { groupField: ['groupingId'], groupCollapse: false, // 默认展开所有分组 groupColumnShow: [false], // 隐藏分组列(配合colModel的hidden配置) // 自定义分组头文本:单条记录的分组头为空 groupText: function (value) { if (value.includes('_single_')) { return ''; } const originalId = value.split('_single_')[0]; return `Group: ${originalId} (${groupCount[originalId]} items)`; }, // 隐藏单条记录的分组头样式 groupHeader: function (value) { if (value.includes('_single_')) { return 'display: none;'; } return ''; } } });
效果说明
- 对于
groupingId=001的两条记录:会显示正常的分组头,展开后展示两条数据; - 对于
groupingId=002的单条记录:分组头会被完全隐藏,直接显示这条数据,视觉上和未分组的行完全一致。
内容的提问来源于stack exchange,提问作者Arunkumar Pushparaj
相关产品推荐
相关产品推荐

