`
wanggeying
  • 浏览: 66440 次
  • 性别: Icon_minigender_2
  • 来自: 济南
社区版块
存档分类
最新评论

单元格合并实现

    博客分类:
  • JS
 
阅读更多
效果图:查看附件
伪代码如下:
	 $('#reportTable').bootstrapTable({
		 method: 'POST',
		 cache: false,
//		 url:projectpath+"/certificate/kcgl2/queryPagedResult.do",
		 url:projectpath+"/certificate/zsph2/queryPagedResult.do",
         contentType: "application/x-www-form-urlencoded",
         dataType: "json",
         pagination: true, //是否显示分页(*)
         striped: false,//隔行换色
         sidePagination: 'server',//分页方式
         pageNumber: 1,//初始化table时显示的页码
         pageSize: 5,//每页条目                    
         pageList: [5, 10, 20, 50, 100],
         locale: 'zh-CN',
         sortable: true,//排序                    
         showColumns: true,//是否显示 内容列下拉框                    
         clickToSelect: false,//点击选中checkbox
         singleSelect: false,//启用单行选中                    
         showExport: true,//是否显示导出
         exportDataType: "all",//basic', 'all', 'selected'.
         queryParamsType: "", //默认值为 'limit' ,在默认情况下 传给服务端的参数为:offset,limit,sort
         queryParams: function queryParams(params) {//设置查询参数   // 设置为 ''  在这种情况下传给服务器的参数为:pageSize,pageNumber
             var param = {
                 pageNumber: params.pageNumber,
                 pageSize: params.pageSize,
             };
             return param;
         },
         columns:[
  			{title:'lch',field:"lch",title:"流程号",align:"center",valign:"middle",sortable:"true"},
  			{title:'sqdw',field:"sqdw",title:"申请单位",align:"center",valign:"middle",sortable:"true"},
  			{title:'lxr',field:"lxr",title:"联系人",align:"center",valign:"middle",sortable:"true"},
  			{title:'zslx',field:"zslx",title:"证书类型",align:"center",valign:"middle",sortable:"true"},
  			{title:'kszh',field:"kszh",title:"开始证号",align:"center",valign:"middle",sortable:"true"},
  			{title:'jszh',field:"jszh",title:"结束证号",align:"center",valign:"middle",sortable:"true"},
  			{title:'sfbj',field:"sfbj",title:"是否办结",align:"center",valign:"middle",sortable:"true"},
		],
		onLoadSuccess: function (data) {
			 mergeTable(data,"reportTable");     
		}
	});

	//全局变量 ***如果每次只是发送ajax请求对table进行局部更新,则每次要合并前前都应该清空这三个变量 不然全局变量会一值追加结果 
	var projNameIdCount="";
	var projNameCount="";
	var subProjNameCount="";
	//合并表格
	function mergeTable(data,tableId){
	    //每次合并表格前 都要将全局变量清空
		projNameIdCount="";
	    projNameCount="";
	    subProjNameCount="";
	    mergeCells(data.rows,0,data.rows.length,"lch",$('#'+tableId));
	    //对projName,subProjName,phase的次数进行分割
	    //去掉末尾的逗号 有时候也可以不用去掉 还是去掉了我这里
	    projNameIdCount = projNameIdCount.substring(0,projNameIdCount.length-1);
	    projNameCount = projNameCount.substring(0,projNameCount.length-1);
	    subProjNameCount = subProjNameCount.substring(0,subProjNameCount.length-1);
	    //console.log(projNameCount+"+"+subProjNameCount+"+"+phaseCount);
	    var strArr0 = projNameIdCount.split(",");
	    var strArr1 = projNameCount.split(",");
	    var strArr2 = subProjNameCount.split(",");
	    //根据次数进行表格合并
	    //合并lch
	    var index = 0;
	    for(var i=0;i<strArr0.length;i++){
	        var count = strArr0[i] * 1;
	        $('#'+tableId).bootstrapTable('mergeCells',{index:index, field:"lch", colspan: 1, rowspan: count});
	        index += count;
	    }
	    //合并sqdw
	    var index = 0;
	    for(var i=0;i<strArr1.length;i++){
	        var count = strArr1[i] * 1;
	        $('#'+tableId).bootstrapTable('mergeCells',{index:index, field:"sqdw", colspan: 1, rowspan: count});
	        index += count;
	    }
	    //合并lxr
	    var index = 0;
	    for(var i=0;i<strArr2.length;i++){
	        var count = strArr2[i] * 1;
	        $('#'+tableId).bootstrapTable('mergeCells',{index:index, field:"lxr", colspan: 1, rowspan: count});
	        index += count;
	    }
	}
	function mergeCells(datas,startIndex,size,fieldName,target) {	//mergeCells(data.rows,0,data.rows.length,"selectqx",$('#'+tableId));
	    //console.log("startIndex:"+startIndex+"size:"+size+"---合并列:"+fieldName)
	    //声明一个数组计算相同属性值在data对象出现的次数和
	    //这里不能使用map,因为如果涉及到排序后,相同的属性并不是紧挨在一起,那么后面的次数会覆盖前面的次数,故这里用数组
	    var sortArr = new Array();
	    for (var i = startIndex; i < size ; i++) {
	        for (var j = i + 1; j < size; j++) {
	            if (datas[i][fieldName] != datas[j][fieldName]){
	                //相同属性值不同
	                if (j - i > 1) {
	                    sortArr.push(j - i);
	                    i = j - 1;
	                    //如果是最后一个元素 把最后一个元素的次数也装进去
	                    if(i == size-1-1){
	                        sortArr.push(1);
	                    }
	                }else{
	                    sortArr.push(j - i);
	                    //如果j是最后一个元素 把最后一个元素的次数装进去
	                    if(j == size - 1){
	                        sortArr.push(1);
	                    }
	                }
	                break;

	            }else {
	                //相同属性值相同 直到最后一次的时候才会装 否则在他们的值不同时再装进去
	                if (j == size - 1) {
	                    sortArr.push(j - i+1);
	                    //这里的赋值感觉有点多余 算了现就这个样子吧 不影响功能
	                    i = j;
	                }
	            }
	        }
	    }

	    //遍历数组,将值装追加到对应的字符串后面
	    for(var prop in sortArr){
	        /*这里在ie8上运行的时候 出现坑 最好遍历数组不要用for in 这里我用了就懒得换了
	        下面加上如果prop是indexOf就停止 就解决了ie8出现的问题*/
	        if(prop == "indexOf"){
	            continue;
	        }
	        if(fieldName == "lch"){
	            var count = sortArr[prop] * 1;
	            projNameIdCount += count +",";
	        }
	        if(fieldName == "sqdw"){
	            var count = sortArr[prop] * 1;
	            projNameCount += count +",";
	        }

	        if(fieldName == "lxr"){
	            var count = sortArr[prop] * 1;
	            subProjNameCount += count +",";
	        }
	    }
	    for(var prop in sortArr){
	        if(prop == "indexOf"){
	            continue;
	        }
	        if(fieldName == "lch"){
	            startIndex = 0;
	            if(projNameCount.length>0){
	                var temp = projNameCount.substring(0,projNameCount.length-1);
	                var strArr1 = temp.split(",");
	                for(var i=0;i<strArr1.length;i++){
	                    var count = strArr1[i] * 1;
	                    startIndex += count;
	                }
	            }
	            if(sortArr[prop] >1){
	                mergeCells(datas,startIndex,startIndex+sortArr[prop],"sqdw",target);
	            }else{
	                //当projName的次数为1就不进入循环
	            	projNameCount +=1+",";
	            	subProjNameCount +=1+",";
	            }
	        }
	        if(fieldName == "sqdw"){
	            //console.log("进入projName--此时开始index-"+startIndex+"--结束index--"+(startIndex+sortArr[prop])*1);
	            startIndex = 0;
	            //subProjName每次进去的startIndex为前面次数的和
	            if(subProjNameCount.length>0){
	                //console.log("subProjNameCount-"+subProjNameCount);
	                var temp = subProjNameCount.substring(0,subProjNameCount.length-1);
	                var strArr1 = temp.split(",");
	                for(var i=0;i<strArr1.length;i++){
	                    var count = strArr1[i] * 1;
	                    startIndex += count;
	                }
	            }
	            if(sortArr[prop] >1){
	                mergeCells(datas,startIndex,startIndex+sortArr[prop],"lxr",target);
	            }else{
	                //当projName的次数为1就不进入循环
	                subProjNameCount +=1+",";
	                phaseCount +=1+",";
	            }
	        }
	     
	    }

	}
  • 大小: 22.3 KB
分享到:
评论

相关推荐

    在Winfrom下的对DataGridView单元格合并

    例如,我们可以使用递归算法来实现纵向单元格合并,或者使用 Dynamic Programming来实现单元格合并等。这些算法可以根据实际情况选择合适的实现方法。 在Winform下实现DataGridView单元格合并可以使用多种方法,...

    winform DataGridView 设置 单元格合并 实现多维表头

    winform DataGridView 设置 单元格合并 源码 实现多维表头

    GridView中单元格合并

    2. **自定义模板字段**:为了实现单元格合并,通常需要使用TemplateField。通过TemplateField,我们可以自定义每一行的显示样式,包括合并单元格。 3. **判断与合并**:在RowDataBound事件中,你可以检查每行的数据...

    WPF GridControl 单元格合并

    在这个特定的示例中,“WPF GridControl 单元格合并”指的是如何在GridControl中实现单元格的合并,以创建更复杂和有组织的布局。单元格合并通常用于当一组数据需要跨多行或多列显示时,例如,汇总信息或者创建带有...

    c# winform ===datagridview 单元格合并

    c# winform ===datagridview 单元格合并 c# winform ===datagridview 单元格合并 c# winform ===datagridview 单元格合并

    基于Jasperreport动态单元格合并模板

    本主题将深入探讨如何利用JasperReport实现动态单元格合并,支持多层分组排序和多分组动态合并单元格。 首先,我们要理解JasperReport的基本概念。JasperReport是一个基于Java的报告设计库,它允许开发者通过JRXML...

    DataGrid简单实现合并单元格

    标题提到的“DataGrid简单实现合并单元格”,实际上是指在不真正合并单元格的情况下,通过自定义头模板和单元格模板来模拟单元格合并的效果。下面,我们将深入探讨如何实现这一功能。 首先,理解DataGrid的基本结构...

    jquery datatable 单元格合并

    要启用单元格合并,我们需要利用其自定义的回调函数和DOM操作。 1. **初始化Datatable**: 首先,我们需要在HTML中创建一个表格,并在JavaScript中初始化DataTable。设置基本参数,如数据源、列定义等: ```html...

    gridcontrol单元格合并

    在本文中,我们将深入探讨如何在GridControl中实现单元格合并。 首先,了解GridControl的基本结构至关重要。GridControl由一系列列(Columns)和行(Rows)组成,每个单元格是列和行的交叉点。单元格合并涉及将一个...

    JSP Table 单元格合并

    ### JSP Table 单元格合并 在网页开发中,表格是展示...综上所述,通过结合 JSP 和 JavaScript 技术,我们可以有效地实现在动态生成的表格中进行单元格合并的功能。这不仅提升了用户体验,也让数据呈现更加直观有序。

    qt6单元格合并WidgetTableDemo

    本示例"qt6单元格合并WidgetTableDemo"显然是关于如何在Qt6中使用`QWidget`创建一个表格,并且涉及到如何合并单元格以实现更复杂的布局和展示。下面我们将深入探讨相关的知识点。 1. **QWidget和QTableWidget**: ...

    DataGridView单元格合并和二维表头_datagridview_

    在提供的压缩包文件中,可能包含了实现上述功能的示例代码,通过研究这些代码,你可以进一步了解和掌握`DataGridView`的单元格合并和二维表头的创建。在实际应用中,根据项目需求,可以进行适当的调整和优化。记住,...

    LayUiTable表单相同参数的单元格合并

    本话题聚焦于LayUI中的Table组件,特别是如何实现相同参数的单元格合并功能,这在展示数据时能有效提高信息的可读性和美观性。 LayUI Table的单元格合并功能,主要是通过`parseData`方法和自定义模板来实现的。当...

    DevExpress 编辑GridControl中合并单元格

    DevExpress GridControl是一款...通过以上知识点,你应该能够理解和实现DevExpress GridControl在版本15及以上中的单元格合并功能。但请注意,实际应用中可能需要结合具体业务需求进行调整,确保合并规则满足实际场景。

    完美的table单元格合并js

    本js脚本完美的实现了table单元格的合并,合并后犹如交叉表的形式,非常完美,并在其中附带例子可以验证。

    delphi dbgrid有条件合并单元格

    DBGrid EhPro(通常简称为DBGridEh)是一个增强版的DBGrid,提供了更多的特性和自定义选项,包括单元格合并。 描述中提到的“dbgrideh 实现有条件合并单元格的例子”意味着我们将探讨如何利用DBGridEh控件的特性来...

    DataGridView单元格合并.rar

    这个"DataGridView单元格合并.rar"文件很可能是包含一个示例项目或者代码片段,教我们如何在C#环境下实现`DataGridView`的单元格合并功能,特别是针对WinForms应用。 单元格合并通常涉及到两种类型:行头合并和列头...

    gridControl根据条件合并单元格

    实现GridControl的单元格合并,主要涉及两个关键部分:GridView对象和条件判断。GridView是GridControl的核心组件,负责处理数据源和显示逻辑。首先,我们需要启用GridView的AllowMergeCells属性,使其具备合并...

    jasperReport 动态合并单元格示例

    当表达式返回`false`时,对应的单元格将不打印,使得与其相邻的单元格合并。 3. **条件判断表达式**:`printWhenExpression`通常会包含一个Java表达式,这个表达式可以根据数据字段的值来决定是否合并。例如,如果...

    DataGridView合并单元格(纵向合并及横向合并)

    通过上述代码片段,我们可以看到在DataGridView中实现单元格合并的过程不仅涉及到逻辑判断,还涉及到精细的绘图操作。正确的实现能够极大地提升数据展示的效果,使用户界面更加友好和直观。然而,这也意味着开发者...

Global site tag (gtag.js) - Google Analytics