zoukankan      html  css  js  c++  java
  • jqgrid分级表格合并

    //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
  • 相关阅读:
    ActiveMQ的消息模式——队列模式(Queue)
    在foxmail上添加阿里邮箱
    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 错误解决
    博客园首页新随笔联系管理订阅订阅随笔- 89 文章- 0 评论- 3 Centos7开放及查看端口
    tomcat设置为开机自启动
    Tensorflow2疑难问题---2、tensorflow2.3的GPU版本安装
    Tensorflow2疑难问题---1、课程介绍
    tensorflow2的gpu的版本安装(一些核心点)
    此环境变量太大, 此对话框允许将值设置为最长2047个字符(解决方法)
    windows下cuda的安装
  • 原文地址:https://www.cnblogs.com/jiangdd/p/13359148.html
Copyright © 2011-2022 走看看