easyUI datagarid单元格动态合并
第二列根据第一列合并,第三列根据第二列合并。层级关系。
/*
* tableID表格的id
* colList要合并的字段例如:"overcount,totalcount"
*/
//加载成功后合并单元格
function mergeCellByField(tableID, colList){
var tTable = $("#" + tableID);//表的id
var ColArray = colList.split(",");//合并的列数组
var TableRowCnts = tTable.datagrid("getRows").length;//得到总行数
var tempTxt = tTable.datagrid("getRows")[0][ColArray[0]],//第一次的临时变量为第一行的值
curTxt='';//存放table表循环出来的对应的字段值
var cellNumArr = [];//存放每次合并开始的下标
var numTotal = 1;//相同的字段数
for (var i = 1; i <= TableRowCnts; i++) {
if(i==TableRowCnts){
curTxt='';//最后一个的情况
}else{
curTxt = tTable.datagrid("getRows")[i][ColArray[0]];
}
if(curTxt == tempTxt){
numTotal+=1;
}else{
//第一个字段的合并
tTable.datagrid("mergeCells", {
index:i-numTotal,//合并开始的索引
field: ColArray[0],//合并的字段
rowspan: numTotal,//合并的行数
colspan: null//合并的列数
});
cellNumArr.push(i-numTotal);//每次合并的行下标的开始索引
tempTxt = curTxt;//将每次循环的值赋值给临时变量,与上一次对比
numTotal = 1; //每次不同时,第一个不算入,从第二个开始对比
}
}
mergeCellByFieldSecond(tTable,ColArray,cellNumArr)
}
//第二个字段的合并
function mergeCellByFieldSecond(tTable, ColArray,cellNumArr){
var befCellArr = cellNumArr;
var tTable = tTable;
var ColArray = ColArray;
var thirdIndexArr = [];
var tempTxt = '';
for(var j = 0; j <= befCellArr.length-1;j++){
var num =befCellArr[j]+1;
var nextNum = befCellArr[j+1];
var index = befCellArr[j];
tempTxt = tTable.datagrid("getRows")[index][ColArray[1]],curTxt='';
var tempArr = cellRow(tTable,ColArray,num,nextNum,tempTxt,1);
thirdIndexArr = thirdIndexArr.concat(tempArr)
}
mergeCellByFieldThird(tTable,ColArray,thirdIndexArr);
}
//第三个字段合并
function mergeCellByFieldThird(tTable,ColArray,thirdIndexArr){
var befCellArr = thirdIndexArr;
var tTable = tTable;
var ColArray = ColArray;
for(var k = 0; k <= befCellArr.length-1;k++){
var num =befCellArr[k]+1;
var nextNum = befCellArr[k+1];
var index = befCellArr[k];
tempTxt = tTable.datagrid("getRows")[index][ColArray[2]];
var tempArr = cellRow(tTable,ColArray,num,nextNum,tempTxt,2);
}
}
//根据前一列合并
function cellRow(tTable,ColArray,num,nextNum,tempTxt,colum){
var TableRowCnts = tTable.datagrid("getRows").length;//得到总行数
var curTxt='';
var cellNumArr = [];//存放每次合并开始的下标
var numTotal = 1;//相同的字段数
if(nextNum == null){
nextNum =TableRowCnts;
}
for (var i = num; i <= nextNum; i++) {
if(i == nextNum){
curTxt='';//最后一个的情况
}else{
curTxt = tTable.datagrid("getRows")[i][ColArray[colum]];
}
if(curTxt == tempTxt){
numTotal+=1;
}else{
//第一个字段的合并
tTable.datagrid("mergeCells", {
index:i-numTotal,//合并开始的索引
field: ColArray[colum],//合并的字段
rowspan: numTotal,//合并的行数
colspan: null//合并的列数
});
cellNumArr.push(i-numTotal);//每次合并的行下标的开始索引
tempTxt = curTxt;//将每次循环的值赋值给临时变量,与上一次对比
numTotal = 1; //每次不同时,第一个不算入,从第二个开始对比
}
}
return cellNumArr;
}
效果图:

easyUI datagarid单元格动态合并的更多相关文章
- freemarker实现单元格动态合并-行合并
项目需求:项目中有个需求,需要将一些数据库中的数据根据需求导出,生成一个word,研究了一些技术,其中包括POI.freemaker,对比了一下实现过程及技术难度没最终使用了freemaker; 原始 ...
- 如何让elemengUI中的表格组件相同内容的单元格自动合并
1. 前言 这两天在工作中遇到这样一个需求:将某个Excel中的数据在页面上以表格形式展示出来,并且尽量保持数据层级与Excel中一致.在原始Excel文件中,对每一行相同的数据都进行了合并,使得数据 ...
- 葡萄城报表 SP2 新特性(1)— 单元格智能合并
中国式复杂报表的布局,因为数据的动态性和结构性,导致其布局往往是无规律,且在设计时无法预测的,如单元格合并,通常不仅希望在每一列的数据展现中,能够根据需要自动将相同的单元格合并,且每个单元格之间该属性 ...
- 使用js方法将table表格中指定列指定行中相同内容的单元格进行合并操作。
前言 使用js方法对html中的table表格进行单元格的行列合并操作. 网上执行此操作的实例方法有很多,但根据实际业务的区别,大多不适用. 所以在网上各位大神写的方法的基础上进行了部分修改以适合自己 ...
- DW 做一个table表 对单元格进行合并
编辑前的代码 <body> <table width="500" border="0" bgcolor='#000000' backgroun ...
- 1.0 poi单元格合合并及写入
最近项目中用到poi生成Excel时,用到了单元格合并,于是参考了http://www.anyrt.com/blog/list/poiexcel.html写的文章,但是其中有些地方不是很清楚,于是自己 ...
- python xlwt 设置单元格样式-合并单元格
xlwt模块详解--合并单元格 import xlwtworkbook = xlwt.Workbook()worksheet = workbook.add_sheet('My sheet')# 合并第 ...
- jQuery实现HTML表格单元格的合并功能
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- EasyUI Datagrid 单元格编辑
3:对于单元格的编辑 $('#Units').datagrid({ pageNumber: 1, //url: "@ViewBag.Domain/Paper/GetQuestionUnit& ...
随机推荐
- 洛谷P2822 组合数问题 杨辉三角
没想到这道题竟然这么水- 我们发现m,n都非常小,完全可以O(nm)O(nm)O(nm)预处理出stripe数组,即代表(i,j)(i,j)(i,j) 及其向上的一列的个数,然后进行递推即可. #in ...
- 前端开发—CSS
CSS 基础概念 致命三问: 它是什么? 层叠样式表,主要作用是对html标签进行装饰. 它的作用:再 html 框架的基础上 ,对标签内容做美化工作. 注释方法:/*单行注释*/ 多行注释同理与h ...
- css实现三栏水平布局双飞翼与圣杯布局
作为布局的入门级选手,网上也查看了很多信息和资源 双飞翼的html结构 <div class="container"> <div class="main ...
- vue组件通信,点击传值,动态传值(父传子,子传父)
转载:https://blog.csdn.net/xr510002594/article/details/83304141 一.父组件传子组件,核心--props 在这里触发 handleClick ...
- [POJ2104] K – th Number (可持久化线段树 主席树)
题目背景 这是个非常经典的主席树入门题--静态区间第K小 数据已经过加强,请使用主席树.同时请注意常数优化 题目描述 如题,给定N个正整数构成的序列,将对于指定的闭区间查询其区间内的第K小值. 输入输 ...
- linux基础正则
1.^word #匹配word开头的内容,vi/vim编辑器里^代表一行的开头. 2.word$ #匹配以word结尾的内容,vi/vim编辑器里$代表一行的结尾. 3.^$ #表示空行 4.. #代 ...
- Linux 文件压缩
压缩工具 compress/uncompress:对应 .Z 结尾的压缩格式文件 压缩格式:gz.bz2.xz.zip.Z gzip 压缩文件并删除源文件(生成.gz的文件) gunzip 解 ...
- PHP实现并发请求
后端服务开发中经常会有并发请求的需求,比如你需要获取10家供应商的带宽数据(每个都提供不同的url),然后返回一个整合后的数据,你会怎么做呢? 在PHP中,最直观的做法foreach遍历urls,并保 ...
- 使用requests爬取小说
实现: import requests import re import time def get_chapter(aim_url): ''' 获取小说章节名称和对应的url地址 :param aim ...
- navicate11不能激活的问题
navicate11不能激活的问题 学习了:http://blog.csdn.net/sanbingyutuoniao123/article/details/52589678 不要安装在系统盘,如果安 ...