首页 > 其他分享 >ExtJs4 grid合并行

ExtJs4 grid合并行

时间:2023-06-06 09:01:29浏览次数:38  
标签:rowspanObj rowspan tr 合并 arrayTd grid var ExtJs4 td

代码实现

/**
 * Kunoy
 * 合并单元格
 * @param {} grid  要合并单元格的grid对象
 * @param {} cols  要合并哪几列 [1,2,4]
 */
var mergeCells = function (grid, cols) {
    var arrayTr = document.getElementById(grid.getId() + "-body").firstChild.firstChild.firstChild.getElementsByTagName('tr');
    var trCount = arrayTr.length;
    var arrayTd;
    var td;
    var merge = function (rowspanObj, removeObjs) { //定义合并函数
        if (rowspanObj.rowspan != 1) {
            arrayTd = arrayTr[rowspanObj.tr].getElementsByTagName("td"); //合并行
            td = arrayTd[rowspanObj.td - 1];
            td.rowSpan = rowspanObj.rowspan;
            td.vAlign = "middle";
            Ext.each(removeObjs, function (obj) { //隐身被合并的单元格
                arrayTd = arrayTr[obj.tr].getElementsByTagName("td");
                arrayTd[obj.td - 1].style.display = 'none';
            });
        }
    };
    var rowspanObj = {}; //要进行跨列操作的td对象{tr:1,td:2,rowspan:5}
    var removeObjs = []; //要进行删除的td对象[{tr:2,td:2},{tr:3,td:2}]
    var col;
    Ext.each(cols, function (colIndex) { //逐列去操作tr
        var rowspan = 1;
        var divHtml = null;//单元格内的数值
        for (var i = 1; i < trCount; i++) {  //i=0表示表头等没用的行
            arrayTd = arrayTr[i].getElementsByTagName("td");
            var cold = 0;
//          Ext.each(arrayTd,function(Td){ //获取RowNumber列和check列
//              if(Td.getAttribute("class").indexOf("x-grid-cell-special") != -1)
//                  cold++;
//          });
            col = colIndex + cold;//跳过RowNumber列和check列
            if (!divHtml) {
                divHtml = arrayTd[col - 1].innerHTML;
                rowspanObj = {tr: i, td: col, rowspan: rowspan}
            } else {
                var cellText = arrayTd[col - 1].innerHTML;
                var addf = function () {
                    rowspanObj["rowspan"] = rowspanObj["rowspan"] + 1;
                    removeObjs.push({tr: i, td: col});
                    if (i == trCount - 1)
                        merge(rowspanObj, removeObjs);//执行合并函数
                };
                var mergef = function () {
                    merge(rowspanObj, removeObjs);//执行合并函数
                    divHtml = cellText;
                    rowspanObj = {tr: i, td: col, rowspan: rowspan}
                    removeObjs = [];
                };
                if (cellText == divHtml) {
                    if (colIndex != cols[0]) {
                        var leftDisplay = arrayTd[col - 2].style.display;//判断左边单元格值是否已display
                        if (leftDisplay == 'none')
                            addf();
                        else
                            mergef();
                    } else
                        addf();
                } else
                    mergef();
            }
        }
    });
};

调用方法

在app.js文件Ext.onReady方法内调用:

Ext.getCmp('grid').getStore().on('load',function(){  
    mergeCells(Ext.getCmp('grid'),[1,2]);  
});  

标签:rowspanObj,rowspan,tr,合并,arrayTd,grid,var,ExtJs4,td
From: https://www.cnblogs.com/yunchen/p/17459529.html

相关文章

  • 在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件实现产品列表信
    有时候,我们为了方便,我们往往使用扩展函数的代码方式创建很多GridView的操作功能,如在随笔《在DevExpress中使用BandedGridView表格实现多行表头的处理》中介绍过多行表头的创建及绑定处理,在《基于DevExpress的GridControl实现的一些界面处理功能》也介绍了一些特殊的展示效果,本篇随......
  • 视频直播源码,动态合并element-ui el-table列和行
    视频直播源码,动态合并element-uiel-table列和行HTML: <template>  <div>    <el-table     :data="tableData"     show-summary     :span-method="arraySpanMethod"    style="width:100%">      <......
  • [ABC205F] Grid and Tokens 题解
    GridandTokens题目大意给定\(n\)个点和一个\(H\timesW\)的网格,每个点可以放置在\((A_i,B_i)\)到\((C_i,D_i)\)的矩形中或不放,每一行或一列只能放置一个点,求最多能放多少个点。思路分析首先看数据范围,再结合题目给的限制条件,容易发现这是一道网络流。考虑建图,因为......
  • AtCoder Beginner Contest 258 G Grid Card Game
    洛谷传送门AtCoder传送门记\(b_i=\sum\limits_{j=1}^ma_{i,j},c_j=\sum\limits_{i=1}^na_{i,j}\)。首先考虑这样一个事情,就是对于\(b_i\le0\)的行有没有可能被选。如果选了它:如果没有选任何列,选这一行肯定不优;如果选了若干列,根据题目的要求,这若干列与这......
  • jqGrid的搜索框下拉
    {name:'wareId',index:'wareId',width:150,formatter:function(cellvalue,options,rowObject){returnrowObject.wareName;},inputtype:"selec......
  • table合并单元格 colspan(跨列)和rowspan(跨行)
    colspan和rowspan这两个属性用于创建特殊的表格。[color=red][b]colspan[/b]是“columnspan(跨列)”的缩写。colspan属性用在td标签中,用来指定单元格横向跨越的列数[/color]:在浏览器中将显示如下:[img][/img]该例通过把colspan设为“3”,令所在单元格横跨了三列。如果我们将cols......
  • WPF入门教程系列二十七 ——DataGrid使用示例MVVM模式(4)
    WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window介绍WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一)   ......
  • 类似grid网格布局的巧妙玩法
    .box{margin:20pxauto;width:800px;height:800px;}ulli{position:relative;float:leftlist-style:none;width:150px;height......
  • c++进行map数据横向合并
    请帮我写一段代码。nlohmann::json怎么把三个字典合并到一起,c++14标准,并且每个字典的长度不一样,原数据不是json。例如:data1=[{"key1":"a1","key2":1},{"key1":"a2","key2":2}]data2=[{"key3":"b1",},{"key3&......
  • 如何在前端应用中合并多个 Excel 工作簿
    前言|问题背景SpreadJS是纯前端的电子表格控件,可以轻松加载Excel工作簿中的数据并将它们呈现在前端浏览器应用的网页上。SpreadJS实例来加载所有工作簿,然后将它们合并到一个电子表格中。此文将向您展示如何合并多个Excel工作簿并将它们作为单个电子表格显示在您的前端浏览器应......