1、设置colModel属性,增加cellattr
cellattr = function (rowId, tv, rawObject, cm, rdata) {
// 设置单元格id
return 'id=\'araName' + rowId + '\'';
}
2、列表加载完成后调用合并单元格方法
// 设置需要合并的单元格
let mergeColumnList = ['areaName', 'areaId', 'siteName', 'siteId'];
gridComplete: function() {
// 调用合并单元格方法
merger('#gridName', mergeColumnList);
}
3、合并单元格方法
/**
* 合并单元格
* @param grid_selector
* @param cellNames
*/
function Merger(grid_selector, cellNames) {
//得到显示到界面的id集合
let ids = $(grid_selector).getDataIDs();
for (let i = 0; i < ids.length; i++) {
//从上到下获取一条信息
const before = $(grid_selector).jqGrid('getRowData', ids[i]);
//定义合并行数
let rowSpanTaxCount = 1;
for (let j = i + 1; j <= ids.length; j++) {
//和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏
const end = $(grid_selector).jqGrid('getRowData', ids[j]);
let result = true;
// 对比信息是否都相同 有一个不同则直接跳出循环
for (let k = 0; k < cellNames.length; k++) {
if (before[cellNames[k]] !== end[cellNames[k]]) {
result = false;
break;
}
}
if (result) {
rowSpanTaxCount++;
// 设置相同单元格父级类名
let parentClass = $('#' + ids[i]).attr('class');
const $curNode = $('#' + ids[j]);
$curNode.attr('class', parentClass);
// 设置下一行类名 实现斑马线效果
$curNode.next() && $curNode.next().attr('class',parentClass.indexOf('secondary') >= 0
? parentClass.replace('ui-priority-secondary', '') : parentClass + ' ui-priority-secondary');
for (let k = 0; k < cellNames.length; k++) {
$(grid_selector).setCell(ids[j], cellNames[k], '', { display: 'none' });
}
} else {
rowSpanTaxCount = 1;
break;
}
// 合并行
for (let k = 0; k < cellNames.length; k++) {
$('#' + cellNames[k] + ids[i]).attr('rowspan', rowSpanTaxCount);
}
}
}
}