jQuery EasyUI有一个非常易于使用的数据列表控件,这是DataGrid控制。某些背景json格式可以传递给在前景中显示的控制,很强大。只要有时需求须要这样即多行合并,如在列表中假设同样的部门字段上下合并达到Excel展示同样的效果。并且有时不止这一个字段的合并,还有其它字段依据内容同样或者其它字段的ID同样啊进行合并。

官网上没有相应的类似的Demo,可能开发中遇到这样的情况一般我们都自己动态拼接成一个table。

事实上,利用官网提供的DataGrid的方法是可以实现datagrid在展现时表格行动合并,只是查询的数据要把合并的数据行“安排”在一起

首先我们<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个属性,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],"");
} */

有关json日期的格式化具体。请參考我的上一篇文章:json日期格式转换问题

动态合并DataGrid行数据的效果例如以下:

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

已是深夜,不要写。如果您有任何问题或建议,注释可以。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

EasyUI-DataGrid多线动态实现选择性合并的更多相关文章

  1. JQuery easyUi datagrid 中 editor 动态设置最大值最小值

    前言 近来项目中使用到 easyui 来进行页面设计,感觉挺方便的,但是网上除了api外,其他有价值的资料比较少,故在此分享一点经验,供大家参考.   问题 JQuery easyUi datagri ...

  2. 重新=》easyui DataGrid是否可以动态的改变列显示的顺序

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...

  3. JQuery EasyUI DataGrid动态合并(标题)单元) 一

    JS: /** * EasyUI DataGrid根据字段动态合并单元格 * @param fldList 要合并table的id * @param fldList 要合并的列,用逗号分隔(例如:&q ...

  4. JQuery EasyUI DataGrid动态合并单元格

    /**        * EasyUI DataGrid根据字段动态合并单元格        * @param fldList 要合并table的id        * @param fldList ...

  5. easyui datagrid行合并

    easyui datagrid行合并 合并方法 /** * EasyUI DataGrid根据字段动态合并单元格 * 参数 tableID 要合并table的id * 参数 colList 要合并的列 ...

  6. (转)扩展jquery easyui datagrid 之动态绑定列和数据

    本文转载自:http://blog.csdn.net/littlewolf766/article/details/7336550 easyui datagrid 不支持动态加载列,上次使用的方法是自己 ...

  7. 动态设置easyui datagrid URL

    动态设置easyui datagrid URL$('#tt').datagrid({url:'website/jsp/servlet',        queryParams:{method:'xx' ...

  8. easyui datagrid remoteSort的实现 Controllers编写动态的Lambda表达式 IQueryable OrderBy扩展

    EF 结合easy-ui datagrid 实现页面端排序 EF动态编写排序Lambda表达式 1.前端页面 var mainListHeight = $(window).height() - 20; ...

  9. easyui datagrid动态设置行、列、单元格不允许编辑

    Easyui datagrid 行编辑.列编辑.单元格编辑设置 功能: 动态对datagrid 进行行.列.单元格编辑进行设置不允许编辑. 禁用行编辑: 在编辑方法调用前,对选择的行进行判断,如果不允 ...

随机推荐

  1. Android 节日短信送祝福(功能篇:1-数据库操作类与自定义ContentProvider)

    首先,还是展示一下部分目录结构:  在节日短信送祝福的功能实现方面,为了能够方便直观展示实现过程,小编我以Java文件为基础,一个一个来展示,免得到时候这个java文件写点,一下又跳到另外一个java ...

  2. 使用Kotlin开发Android

    查看我的所有开源项目[开源实验室] 欢迎增加我的QQ群:[201055521],本博客client源代码下载[请点击] 摘要 我首先声明我并没有使用Kotlin非常长时间,我差点儿是在学习的同一时候写 ...

  3. 详细回复某个CSDN网友,对我的文章和技术实力以及CSDN的吐槽

    貌似被大学生鄙视了,我也是醉了,现在的大学生水平和信心,都这么高了~ 看来,我得加把劲了~ o(︶︿︶)o 电子商务系列文章,是我闲来无事,分享自己的一些业余实践经验的文章.其中关于数据库设计的这一篇 ...

  4. App各种Icon及Launch image的尺寸和用途

    App各种Icon及Launch image的尺寸和用途 IOS7,8 Asset iPhone 6 Plus (@3x) iPhone 6 and iPhone 5 (@2x) iPhone 4s ...

  5. 探险 - 树型dp(背包)/多叉树转二叉树

    题目大意: 国家探险队长 Jack 意外弄到了一份秦始皇的藏宝图,于是,探险队一行人便踏上寻宝之旅,去寻找传说中的宝藏. 藏宝点分布在森林的各处,每个点有一个值,表示藏宝的价值.它们之间由一些小路相连 ...

  6. C#编写TensorFlow人工智能应用

    C#编写TensorFlow人工智能应用 TensorFlowSharp入门使用C#编写TensorFlow人工智能应用学习. TensorFlow简单介绍 TensorFlow 是谷歌的第二代机器学 ...

  7. 远程ssh执行命令时提示找不到命令

    最开始的时候碰到这种问题,是在hadoop003上配置了jdk1.8, 在hadoop002上执行ssh hadoop003 java -version提示没有命令,先ssh hadoop003然后执 ...

  8. 图解linux启动过程

    概述 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWUVZVUFOR0VO/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...

  9. 征服OA 飞鱼工作流程的在线培训课程(两)HTML形成基于

    表HTML的重要作用,等效混凝土框架建筑的行,于div在此之前流行.是否所有形式的世界.在角色表页面主要是针对页面布局和定位.通过整合人才规划表设计出合理的页面布局. 当然.更重要的是,存在是表示数据 ...

  10. iOS RunLoop了解和使用

    RunLoop介绍和使用 上次讲了runtime,这次是runloop,虽然两者都是run开头的名词术语,但是在OC中,这两个东西压根没啥联系.这篇文章主要讲讲runloop的一些概念和用法.其中包含 ...