EasyUI-DataGrid多行动态选择性合并算法实现

JqueryEasyUI修改DataGrid使其支持多选框 最近研究JqueryEasyUI插件,用它的DataGrid来实现管理员权限管理的功能,但是在权限设置的时候用它提供的ComboBox发现有个BUG,那就是在点编辑的载入数据的时候莫名其妙的多了两个",," 干脆就自己用checkbox写个权限管理功能出来吧. 首先我有一个权限 阅读详情

 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最用!

          已深夜,不写了,如有问题或者建议,可以评论留言。

【SLAM】SVO2.0编译运行和论文代码解读 SVO2是我遇到的最难编译的代码了,可能公开版本不能放太鲁棒的代码吧,搞了快一个星期,终于跑起来了。 阅读详情

相关推荐

微信小程序scroll-view,点击menu,滚动到锚点;滚动到锚点,激活menu。

首先看看效果图1、首先是点击菜单,滚动列表,这个实现比较简单。直接使用scroll-view 的 scroll-into-view属性,小程序文档。&lt;view class='container'&gt; &lt;!-- 菜单 --&gt; &lt;view class='menu'&gt; &lt;ul&gt; &lt;!-- scrollList 修改cate --&g...

weixin_39834214的博客 1万+

Easyui数据表格合并单元格

$('#dg').datagrid({ width: 'auto', height: 'auto', scrollbarSize: 0, queryParams: {}, url: 'kkkk', columns: [[ ...

Skye_H的博客 1867

Ubuntu20.04下Intel RealSense D435i相机驱动配置全攻略(含ROS Noetic适配)

本文详细介绍了在Ubuntu20.04系统下配置Intel RealSense D435i相机驱动的完整流程,包括libRealsense SDK 2.0安装、ROS Noetic适配及常见问题解决方案。通过实战指南帮助开发者快速实现深度相机与ROS的集成,适用于机器人视觉和SLAM应用开发。

weixin_29281915的博客 512

easyui topjui 合并datagrid的单元格

easyui的mergeCells用于将表格中的多个单元格合并为一个单元格。6. 如果单元格的值和上一个单元格的值不同,则将当前单元格的值作为新的单元格值,并设置该单元格的行索引和跨行数。7. 最后,遍历所有单元格,如果跨行数大于1,则调用easyui的mergeCells方法合并单元格。5. 如果单元格的值和上一个单元格的值相同,则合并单元格,并将当前单元格的值设置为空。3. 在mergeCells方法中,首先获取表格的所有列信息、行信息和单元格信息。4. 遍历所有列,对于每一列,遍历该列的所有单元格。

qq_39756886的博客 871

Abaqus梁模型仿真中的常见陷阱与优化策略

本文深入探讨了Abaqus梁模型仿真中的常见陷阱与优化策略,涵盖几何建模、材料属性设置、边界条件处理等关键环节。针对梁截面方向定义、网格划分、复合截面建模等典型问题,提供了实用的Python脚本示例和优化方案,帮助工程师避免计算错误并提升仿真精度。文章特别强调了动力分析中的网格密度要求和材料非线性考虑,为复杂工程应用提供专业指导。

weixin_29099217的博客 461

第十五届蓝桥杯省赛C/C++B组H题【拔河】题解(AC)

由于枚举三个点肯定会超时,所以只能枚举两个点,我们尝试枚举第一个区间。的复杂度,需要找出右区间中和左区间的和最相近的值,可以考虑使用。一开始,我们将所有可能的右区间的区间和,都插入。做法同上,用前缀和优化数组求和的过程。的数组和差值最小是多少,其中。递增进行枚举左区间,当。的数组,求两个子数组。为左端点的区间的和。

一只大采集~ 5283

jQuery EasyUI 数据网格 - 合并单元格

为了合并数据网格(datagrid)单元格,只需简单地调用 'mergeCells' 方法,并传入合并信息参数,告诉数据网格(datagrid)如何合并单元格。在所有合并的单元格中,除了第一个单元格,其它单元格在合并后被隐藏。当数据加载之后,我们合并数据网格(datagrid)中的一些单元格,所以放置下面的代码在 onLoadSuccess 回调函数中。数据网格(datagrid)经常需要合并一些单元格。本教程将向您展示如何在数据网格(datagrid)中合并单元格。创建数据网格(DataGrid)

unber的博客 605

字符串相似度比较算法:Jaro–Winkler similarity的原理及实现

前言 在前面的文章中,笔者有对编辑距离以及Levenshtein距离进行详细的说明,其实levenshtein距离是编辑距离的其中一种定义,本文所说的Jaro距离是编辑距离的另外一种定义,它也是对两个字符串的相似度进行衡量,以得出两字符串的相似程度。下面我们一起来学习这个算法的原理以及实现吧。 标题算法定义 下面先说说Jaro distance(又称Jaro similarity),这是由Matt...

蓝天白云梦的csdn博客 1万+

EasyUI 多行动态选择性合并算法实现

jQuery EasyUI中有一个很好用的数据列表控件,即DataGrid控件,后台以一定的json格式传给控件就能在前台展示出来,功能很强大,不过有时需求需要这样即多行合并,如在列表中如果相同的部门字段上下合并达到Excel展示相同的效果,而且有时不止这一个字段的合并,还有其他字段根据内容相同或者其他字段的ID相同啊进行合并。        官网上没有对应的类似的Demo,可能开发中遇到这种情

裂缝中的阳光、的博客 755

Uniapp返回上一页并刷新:亲测有效的 goBack 实现技巧!

这个技巧在实际开发中非常常用,特别适合表单提交后返回列表刷新这类场景。比起依赖onShow或复杂的vuex状态同步,这种方式更直接、好维护,也不容易出 bug。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1841

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

MoorePlus的博客 4219

EasyUI-DataGrid多线动态实现选择性合并

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

weixin_30788619的博客 79

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

计算机组成原理(第三版)唐朔飞-第三章系统总线-课后习题

weixin_45735391的博客 6万+

easyui 合并单元格

function MergeCells(tableID, fldList) { var Arr = fldList.split(","); var dg = $('#' + tableID); var fldName; var RowCount = dg.datagrid("getRows").length; var

Sugar_521的专栏 560

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

easyui 合并列_EasyUI 数据表格合并单元格(Merge Cells for DataGrid)_easyui demo

Merge Cells for DataGridCells in DataGrid body can be merged.ProductItem IDList PriceUnit CostAttributeStatus源代码Merge Cells for DataGrid - jQuery EasyUI DemoMerge Cells for DataGridCells in DataGrid b...

weixin_39909366的博客 691

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于Jquery EasyUI datagrid合并单元格的实践

easyui datagrid合并单元格

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1885

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

jEasyUI 合并单元格

首先,您需要创建一个数据网格。例如,您可以设置表格的 ID、标题、样式、数据源等。这个方法会告诉数据网格如何合并单元格。在合并过程中,除了第一个单元格外,其他单元格在合并后会被隐藏。在 jEasyUI 中合并数据网格(datagrid)的单元格是一个相对简单的过程。在这个方法中,您需要传入合并信息,包括要合并的单元格的索引、字段名、跨行数等。数组,其中包含了要合并的单元格的索引和跨行数。然后,我们遍历这个数组,对每个元素调用。:在数据加载成功后,您可以通过调用。方法,传入相应的参数。

froginwe11的博客 546

EasyUI-数据表格合并单元格

@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script src="~/Scri...

dxm809的博客 674

easyUI datagrid点击行单选、按shift或Ctrl点击行多选

EasyUI DataGrid初始化方法中增加如下方法: singleSelect:true, //只允许选中一行 onClickRow(index, row) { //-------------for TEST 结合SHIFT,CTRL,ALT键实现单选或多选---------------- if (index != selectIndexs.firstSelectRowIn...

a1513049385的博客 3295

easyui实现datagrid---行内单元格联动、单选、多选

找了许多的文章查询最终实现功能,代码部分为粗体,其余是解说:&lt;td colspan="3"&gt;     &lt;table id="sbDatagrid" style="width:480px"&gt;&lt;/table&gt;&lt;/td&gt;$("#sbDatagrid").datagrid({            idField:'id' ,

mingqingchangcheng的博客 4724
上一篇: json日期格式转换
下一篇: method initializationerror not found:JUnit4单元测试报错问题
Java我人生
博客等级 码龄15年 2147粉丝 132原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值