• Extjs 报表同值合并方法


    做出如下图效果的报表:

    核心函数:用的时候添加进去就行

    //地市名称相同的列合并
    function gridSpan(grid, rowOrCol,colName, borderStyle) {
        var array1 = new Array();
        var count1 = 0;
        var count2 = 0;
        var index1 = 0;
        var index2 = 0;
        var aRow = undefined;
        var preValue = undefined;
        var firstSameCell = 0;
        var allRecs = grid.getStore().getRange();
        if (rowOrCol == "row") {
            count1 = grid.getColumnModel().getColumnCount();
            count2 = grid.getStore().getCount();
        } else {
            count1 = grid.getStore().getCount();
            count2 = grid.getColumnModel().getColumnCount();
        }
        count1 = 2; // 对第二列合并
        for (i = 1; i < count1; i++) {
            preValue = undefined;
            firstSameCell = 0;
            array1[i] = new Array();
            for (j = 0; j < count2; j++) {
                if (rowOrCol == "row") {
                    index1 = j;
                    index2 = i;
                } else {
                    index1 = i;
                    index2 = j;
                } 
                if (allRecs[index1].get(colName) == preValue) {
                    allRecs[index1].set(colName, "&nbsp;");
                    array1[i].push(j);
                    //alert(i + "\r\n"+j);
                    if (j == count2 - 1) {
                        var index = firstSameCell + Math.round((j + 1 - firstSameCell) / 2 - 1);
                        if (rowOrCol == "row") {
                            allRecs[index].set(colName, preValue);
                        } else {
                            allRecs[index1].set(grid.getColumnModel().getColumnId(index), preValue);
                        }
                    }
                } else {
                    if (j != 0) {
                        var index = firstSameCell + Math.round((j + 1 - firstSameCell) / 2 - 1);
                        if (rowOrCol == "row") {
                            allRecs[index].set(colName, preValue);
                        } else {
                            allRecs[index1].set(grid.getColumnModel().getColumnId(index), preValue);
                        }
                    }
                    firstSameCell = j;
                    preValue = allRecs[index1].get(colName);
                    allRecs[index1].set(colName, "&nbsp;");
                    if (j == count2 - 1) {
                        allRecs[index1].set(colName, preValue);
                    }
                }
            }
        }
        grid.getStore().commitChanges();//添加所有分隔线
        for (i = 0; i < grid.getStore().getCount(); i++) {
            for (j = 0; j < grid.getColumnModel().getColumnCount(); j++) {
                aRow = grid.getView().getCell(i, j);
                aRow.style.borderTop = borderStyle;
                aRow.style.borderLeft = borderStyle;
            }
        }//去除合并的单元格的分隔线
        for (i = 1; i < array1.length; i++) {
            for (j = 0; j < array1[i].length; j++) {
                
                if (rowOrCol == "row") {
                    aRow = grid.getView().getCell(array1[i][j], i);
                    aRow.style.borderTop = 'none';
                } else {
                    aRow = grid.getView().getCell(i, array1[i][j]);
                    aRow.style.borderLeft = "none";
                }
            }
        }
    }


    store在load的时候:

        errorInfoStore.on('load', function() {
    
                    var mygrid = Ext.getCmp('mygrid');
    
                    gridSpan(mygrid, 'row',"areaCode",  '1px solid #9BCEDB');
                });        
                

    gridSpan方法的第三个参数 areaCode表示的是列标题。

    在jsp页面加入如下css:

    /*与表头对齐*/
    .x-grid3-row td,.x-grid3-summary-row td {
        padding-right: 0px;
        padding-left: 0px;
        padding-top: 0px;
        padding-bottom: 0px;
    }  
    
    /*去掉行间空白*/
    .x-grid3-row {
        border-right- 0px;
        border-left- 0px;
        border-top- 0px;
        border-bottom- 0px;
    }
  • 相关阅读:
    微信开发 之 开启开发模式
    微信公众号开发 之 编辑模式使用
    分析各种Android设备屏幕分辨率与适配
    【面向对象设计模式】 适配器模式 (二)
    重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改
    【Android 应用开发】Android资源文件
    java 创建并写入文件
    隐藏 HttpClient 在console的日志
    HOW TO CHANGE THE DEFAULT KEY-VALUE SEPARATOR OF A MAPREDUCE JOB
    java 时间戳转换
  • 原文地址:https://www.cnblogs.com/kunpengit/p/2768239.html
Copyright © 2020-2023  润新知