1、首先我们<table>增加一个属性data-options="onLoadSuccess:mergeCells",mergeCells是我们对应的JS方法名,意思就是datagrid加载数据成功之后,执行这个mergeCells方法,mergeCells定义如下:

//datagrid加载完后合并指定单元格
function mergeCells(data){
var arr =[{mergeFiled:"SERIALNUM",premiseFiled:"PROJECTID"}, //合并列的field数组及对应前提条件filed(为空则直接内容合并)
{mergeFiled:"PROJECTNAME",premiseFiled:"PROJECTID"},
{mergeFiled:"ORGSTARTTIME",premiseFiled:"PROJECTID"},
{mergeFiled:"ORGUNIT",premiseFiled:"PROJECTID"}
];
var dg = $("#datagrid1"); //要合并的datagrid中的表格id
var rowCount = dg.datagrid("getRows").length;
var cellName;
var span;
var perValue = "";
var curValue = "";
var perCondition="";
var curCondition="";
var flag=true;
var condiName="";
var length = arr.length - 1;
for (i = length; i >= 0; i--) {
cellName = arr[i].mergeFiled;
condiName=arr[i].premiseFiled;
if(isNotNull(condiName)){
flag=false;
}
perValue = "";
perCondition="";
span = 1;
for (row = 0; row <= rowCount; row++) {
if (row == rowCount) {
curValue = "";
curCondition="";
} else {
curValue = dg.datagrid("getRows")[row][cellName];
/* if(cellName=="ORGSTARTTIME"){//特殊处理这个时间字段
curValue =formatDate(dg.datagrid("getRows")[row][cellName],"");
} */
if(!flag){
curCondition=dg.datagrid("getRows")[row][condiName];
}
}
if (perValue == curValue&&(flag||perCondition==curCondition)) {
span += 1;
} else {
var index = row - span;
dg.datagrid('mergeCells', {
index : index,
field : cellName,
rowspan : span,
colspan : null
});
span = 1;
perValue = curValue;
if(!flag){
perCondition=curCondition;
}
}
}
}
}
var arr =[{mergeFiled:"SERIALNUM",premiseFiled:"PROJECTID"},    //合并列的field数组及对应前提条件filed(为空则直接内容合并)
{mergeFiled:"PROJECTNAME",premiseFiled:"PROJECTID"},
{mergeFiled:"ORGSTARTTIME",premiseFiled:"PROJECTID"},
{mergeFiled:"ORGUNIT",premiseFiled:"PROJECTID"}
];

2、是定义要合并哪些列的数组(存对象),数组里的对象有2个属性,mergeFiled:合并列的field名,和premiseFiled:合并前边列的前提条件约束列即只有这个约束列相等时再合并mergeFiled列,如premiseFiled:"",则直接按内容合并,而直接按内容相同与否合并就有一个很大的bug,就是相邻的行即使不应该合并但是内容相同也合并了,这就很容造成表格合并的效果参差不齐不是我们想要的,所以增加了一个premiseFiled属性来约束合并作为前提条件,如只有projectID字段(可甚至否一个字段hidden="true"来隐藏此列)相同的情况下才合并projectName。

var dg = $("#datagrid1");   //要合并的datagrid中的表格id

是获取table的jQuery对象以便后边获取各个行的数据。此方法是对相邻在满足约束字段相同的情况下进行的内容合并,所以查询时要把这些要合并的行“安排”在一起,用排序或者连接查询,分组都可以。如果有个日期字段也想合并的话,单纯的这样是不行的,是合并不了的,调用DataGrid方法获取的json格式的日期是不相同的(很难相同),这时需要用到json日期的格式化改成我们常见的格式再比较,如我所注释着的代码:

/* if(cellName=="ORGSTARTTIME"){//特殊处理这个时间字段
curValue =formatDate(dg.datagrid("getRows")[row][cellName],"");
} */

如果有checkbox的话,你想对应的更改前边的checkbox,也想进行合并,你可以把checkbox列的field属性设置为合并的列的值如projectId,这样把checkbox列也写入到上边JS方法中的数组中,那么就能起到合并checkbox最用!

本文转载自http://blog.csdn.net/chenleixing/article/details/44229359,本转载主要为分享技术知识,如有侵权,请联系转载人及时删除!

EasyUI:EasyUI-DataGrid多行合并实现的更多相关文章

  1. 给Jquery easyui 的datagrid 每行增加操作链接(转)

    http://www.thinkphp.cn/code/207.html 通过formatter方法给Jquery easyui 的datagrid 每行增加操作链接我们都知道Jquery的EasyU ...

  2. easyUI的datagrid每行数据添加操作按钮的方法

    今天做项目的时候,想在easyui的datagrid每一列数据后边都加上一个操作按钮,一开始想在后台拼接字符串用JSON传回,但是我测试之后发现这个方法不管用,在网上搜索了一下,整理如下: 其实要加一 ...

  3. 给Jquery easyui 的datagrid 每行添加操作链接

    背景 我们都知道Jquery的Easy-UI的datagrid能够加入而且自己定义Toolbar,这样我们选择一行然后选择toolbar的对应button就能够对这行的数据进行操作.但实际项目里我们可 ...

  4. EasyUI中datagrid的行编辑模式中,找到特定的Editor,并为其添加事件

    有时候在行编辑的时候,一个编辑框的值要根据其它编辑框的值进行变化,那么可以通过在开启编辑时,找到特定的Editor,为其添加事件 // 绑定事件, index为当前编辑行 var editors = ...

  5. Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)

    项目中有个datagrid需要编辑行时,用到Editor的属性,那么如何添加一个事件 问题:同一个编辑行中的某个单元格值改变时,修改其他单元格的值 页面用到的datagrid <table id ...

  6. (原创)EasyUI中datagrid的行编辑模式中,找到特定的Editor,并为其添加事件

    有时候在行编辑的时候,一个编辑框的值要根据其它编辑框的值进行变化,那么可以通过在开启编辑时,找到特定的Editor,为其添加事件 // 绑定事件, index为当前编辑行 var editors = ...

  7. EasyUI之dataGrid的行内编辑

    $(function () { var datagrid; //定义全局变量datagrid var editRow = undefined; //定义全局变量:当前编辑的行 datagrid = T ...

  8. EasyUI的datagrid表格行高度增加

    这里以easyui的default样式为例: 找到easyui--->themes-->default-->easyui.css-->Ctrl+F找到.datagrid-row ...

  9. datagrid指定行合并导出

    导出代码: public void GridViewToExcel(GridView ctrl, string FileType, string FileName) { HttpContext.Cur ...

随机推荐

  1. 浅谈HTML移动Web开发(转)

    一.响应式Web设计 PC端常用的两种布局方式就是固定布局和弹性布局,前者设置一个绝大多数电脑能征服显示的固定宽度居中显示,后者则采用百分百. 响应式布局意味着媒体查询,响应式web设计并非新的技术, ...

  2. 3、scala数组

    一.Array .Array Buffer 1.Array 在Scala中,Array代表的含义与Java中类似,也是长度不可改变的数组. 此外,由于Scala与Java都是运行在JVM中,双方可以互 ...

  3. mysql的索引key_len计算方法,及个字段所占字节数

    key_len的长度计算公式: varchr(10)变长字段且允许NULL = 10 * ( character set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段) ...

  4. Thinkphp5+plupload图片上传功能,支持实时预览图片。

    今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...

  5. 获得用户IP、城市、国家等信息的api接口

    1 这个信息比较多 https://api.ipdata.co/?api-key=test <script> $.get("https://api.ipdata.co?api-k ...

  6. HDU5381【莫队算法+区间GCD特性】

    前言: 主要最近在刷莫队的题,这题GCD的特性让我对莫队的使用也有了新的想法.给福利:神犇的一套莫队算法题 先撇开题目,光说裸的一个莫队算法,主要的复杂度就是n*sqrt(n)对吧,这里我忽略了一个左 ...

  7. ue4 fuck

    https://answers.unrealengine.com/questions/661969/uspringarmcomponent-ucameracomponent-not-identifie ...

  8. [原创]内网SSH密码爆破工具sshcrack(配合Cscan批量弱口令检测)

    0x000 前言 sshcrack是一个命令行下的SSH密码爆破工具,适用于内渗中SSH密码检测 当然也可用于外网SSH密码爆破,支持Windows/Linux,其它系统未测.Tip1 0x001 目 ...

  9. 手工sql注入判断是否存在注入点

    1.加入单引号 ’提交,结果:如果出现错误提示,则该网站可能就存在注入漏洞.2.数字型判断是否有注入;语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)结果:分别返回不 ...

  10. node.js安装与配置

    node.js是一个基于Chrome V8引擎的javascrit运行环境. node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量又高级. node.js的包管理器npm,是全球最大的开源 ...