//gridName表名 //CellName需要合并的列名(多个用,号隔开) //mainId主列名(多个用,号隔开,前面的等级更高) function MergerStatistics(gridName, CellName, mainId) { //得到显示到界面的id集合 var mya = $("#" + gridName + "").getDataIDs(); //当前显示多少条 var length = mya.length; var cellNames = CellName.split(","); var multilevel = []; if(!!mainId) multilevel = mainId.split(","); var originRowCount = {}; $.each(cellNames,function(i,n){ $("#" + gridName + "").find("tr td[aria-describedby="+gridName+"_"+n+"]").show(); originRowCount[n] = 1; }); for (var n = 0; n < cellNames.length; n++) { for (var i = 0; i < length; i++) { //从上到下获取一条信息 var before = $("#" + gridName + "").jqGrid('getRowData', mya[i]); before["gridMainId"] = gridMainId(before,multilevel); //定义合并行数 var rowSpanTaxCount = 1; var rowCount = $.extend({},originRowCount); for (j = i + 1; j <= length; j++) { //和上边的信息对比 如果值一样就合并行数+1 然后设置rowspan 让当前单元格隐藏 var end = $("#" + gridName + "").jqGrid('getRowData', mya[j]); end["gridMainId"] = gridMainId(end,multilevel); //判断主列是否一致 if (before[cellNames[n]] == end[cellNames[n]] && compareLevel(before,end,multilevel,cellNames[n])) { rowSpanTaxCount++; rowCount[cellNames[n]] = ++ rowCount[cellNames[n]]; $("#" + gridName + "").setCell(mya[j], cellNames[n], '', { display: 'none' }); //$("#" + cellNames[n] + "" + mya[i] + "").attr("rowspan", rowSpanTaxCount);//最后合并需要合并的行与合并的行数 } else { break; } } $("#"+ gridName + " tr:eq(" + (i+1) + ") td[aria-describedby="+gridName+"_"+cellNames[n]+"]").attr("rowspan", rowCount[cellNames[n]]);//最后合并需要合并的行与合并的行数 rowSpanTaxCount = 1; } } } //拼接所有主列的值 function gridMainId(rowData,multilevel){ var gridMainId = ""; for(var i in multilevel){ gridMainId += rowData[multilevel[i]]+";"; } return gridMainId; } //比较主列是否一致 function compareLevel(before,end,multilevel,key){ if(multilevel.length == 0) return true; var level = multilevel.indexOf(key); var flag = true; if(level < 0){//如果合并列不属于主列,那么需要所有主列一致才能合并 if(before["gridMainId"] != end["gridMainId"]) flag = false; }else{ for(var i=0;i<level;i++){//如果合并列属于主列,那么需要更高的主列相等才能合并 if(before[multilevel[i]] != end[multilevel[i]]){ flag = false; break; } } } return flag; }
在表格生成以后调用一下MergerStatistics(gridName, CellName, mainId)就好了。比如jqgrid的loadComplete方法。
————————————————
版权声明:本文为CSDN博主「从心归零」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36804701/article/details/97648325