1.页面引入js/css

@*1、Jquery组件引用*@

@*2、bootstrap组件引用*@

@*3、bootstrap table组件以及中文包的引用*@

2.页面定义一个table

3.初始化js文件

function initTable() {

$('#table').bootstrapTable('destroy');

$('#table').bootstrapTable({

url: ctx + 'mergeCell/mergeCellData',

method: 'post',//请求方式

contentType: "application/x-www-form-urlencoded",

sortOrder: "desc",

uniqueId: "tid", // 每一行的唯一标识,一般为主键列

striped: true, //是否显示行间隔色

pagination: true, // 是否分页

sidePagination: "client",//分页方式:client客户端分页,server服务端分页(*)

striped: true, // 是否显示行间隔色t

pagination: true, // 是否分页

pageSize: 10,

pageList: [10,15,30],

responseHandler: false,

columns: [

[

{field: 'tname', title: '名称', rowspan: 2, valign: 'middle', halign: "center", align: 'center'},

{field: 'tid', title: '主键', rowspan: 2, valign: 'middle', halign: "center", align: 'center'},

{field: 'tcode', title: '代码', rowspan: 2, valign: 'middle', halign: "center", align: 'center'},

{field: 'createTime', title: '时间', rowspan: 2, valign: 'middle', halign: "center", align: 'center'},

{title: '地区', colspan: 2, align: 'center', valign: 'middle', halign: "center", align: 'center'}

],

[

{field: 'strDefault1', title: '地区一', align: 'center', halign: "center"},

{field: 'strDefault2', title: '地区二', align: 'center', halign: "center"}

]

],

});

$('#table').bootstrapTable('resetView');

}

4.合并单元格的js

/*

合并行

@param data 原始数据(在服务端完成排序)

@param fieldName 合并属性名称数组

@param colspan 列数

@param target 目标表格对象

*/

function mergeCells(data, fieldName, colspan, target) {

if (data.length == 0) {

alert("不能传入空数据");

return;

}

var numArr = [];

var value = data[0][fieldName];

var num = 0;

for (var i = 0; i < data.length; i++) {

if (value != data[i][fieldName]) {

numArr.push(num);

value = data[i][fieldName];

num = 1;

continue;

}

num++;

}

if (typeof (value) != "undefined" && value != "") {

numArr.push(num);

}

var merIndex = 0;

for (var i = 0; i < numArr.length; i++) {

$(target).bootstrapTable('mergeCells',

{

index: merIndex,

field: fieldName,

colspan: colspan,

rowspan: numArr[i]

})

merIndex += numArr[i];

}

}

5.完整j$(function () {  initTable();

})

/**

* 初始化 table 数据

*/

function initTable() {

$('#table').bootstrapTable('destroy');

$('#table').bootstrapTable({

url: ctx + 'mergeCell/mergeCellData',

method: 'post',//请求方式

contentType: "application/x-www-form-urlencoded",

sortOrder: "desc",

uniqueId: "tid", // 每一行的唯一标识,一般为主键列

striped: true, //是否显示行间隔色

pagination: true, // 是否分页

sidePagination: "client",//分页方式:client客户端分页,server服务端分页(*)

striped: true, // 是否显示行间隔色t

pagination: true, // 是否分页

pageSize: 10,

pageList: [10,15,30],

responseHandler: false,

onLoadSuccess: function (data) {

var data = $('#table').bootstrapTable('getData', true);//获取当前页数据

mergeCells(data, "tname", 1, $('#table'));

mergeCells(data, "tcode", 1, $('#table'));//行合并mergeColspan(data, ['tname','tcode'], $('#table'));//列合并

}, onPageChange: function () {//当页面更改页码或页面大小时触发 var data = $('#table').bootstrapTable('getData', true); mergeCells(data, "tname", 1, $('#table')); mergeCells(data, "tcode", 1, $('#table'));//行合并 }, columns: [ [ {field: 'tname', title: '名称', rowspan: 2, valign: 'middle', halign: "center", align: 'center'}, {field: 'tid', title: '主键', rowspan: 2, valign: 'middle', halign: "center", align: 'center'}, {field: 'tcode', title: '代码', rowspan: 2, valign: 'middle', halign: "center", align: 'center'}, {field: 'createTime', title: '时间', rowspan: 2, valign: 'middle', halign: "center", align: 'center'}, {title: '地区', colspan: 2, align: 'center', valign: 'middle', halign: "center", align: 'center'} ], [ {field: 'strDefault1', title: '地区一', align: 'center', halign: "center"}, {field: 'strDefault2', title: '地区二', align: 'center', halign: "center"} ] ], }); $('#table').bootstrapTable('resetView'); } /* 合并行 @param data 原始数据(在服务端完成排序) @param fieldName 合并属性名称数组 @param colspan 列数 @param target 目标表格对象 */ function mergeCells(data, fieldName, colspan, target) { if (data.length == 0) { alert("不能传入空数据"); return; } var numArr = []; var value = data[0][fieldName]; var num = 0; for (var i = 0; i < data.length; i++) { if (value != data[i][fieldName]) { numArr.push(num); value = data[i][fieldName]; num = 1; continue; } num++; } if (typeof (value) != "undefined" && value != "") { numArr.push(num); } var merIndex = 0; for (var i = 0; i < numArr.length; i++) { $(target).bootstrapTable('mergeCells', { index: merIndex, field: fieldName, colspan: colspan, rowspan: numArr[i] }) merIndex += numArr[i]; } } /** * 合并列 * @param data 原始数据(在服务端完成排序) * @param fieldName 合并属性数组 * @param target 目标表格对象 */ function mergeColspan(data, fieldNameArr, target) { if (data.length == 0) { alert("不能传入空数据"); return; } if (fieldNameArr.length == 0) { alert("请传入属性值"); return; } var num = -1; var index = 0; for (var i = 0; i < data.length; i++) { num++; for (var v in fieldNameArr) { index = 1; if (data[i][fieldNameArr[v]] != data[i][fieldNameArr[0]]) { index = 0; break; } } if (index == 0) { continue; } $(target).bootstrapTable('mergeCells', {index: num, field: fieldNameArr[0], colspan: fieldNameArr.length, rowspan: 1}); } }

6.后台数据

@ResponseBody

@PostMapping("/mergeCellData")

public List mergeCellData(){

List list = new ArrayList<>();

Norm norm1 = new Norm();

norm1.setTid(new BigDecimal(1));

norm1.setTname("合并指标1");

norm1.setTcode("代码1");

norm1.setCreateTime(new Date());

norm1.setStrDefault1("昌平");

norm1.setStrDefault2("大兴");

Norm norm2 = new Norm();

norm2.setTid(new BigDecimal(2));

norm2.setTname("合并指标1");

norm2.setTcode("代码2");

norm2.setCreateTime(new Date());

norm2.setStrDefault1("昌平");

norm2.setStrDefault2("大兴");

Norm norm3 = new Norm();

norm3.setTid(new BigDecimal(3));

norm3.setTname("合并指标2");

norm3.setTcode("代码3");

norm3.setCreateTime(new Date());

norm3.setStrDefault1("咸阳");

norm3.setStrDefault2("杨凌");

Norm norm4 = new Norm();

norm4.setTid(new BigDecimal(4));

norm4.setTname("合并指标3");

norm4.setTcode("代码3");

norm4.setCreateTime(new Date());

norm4.setStrDefault1("齐齐哈尔");

norm4.setStrDefault2("哈尔冰");

Norm norm5 = new Norm();

norm5.setTid(new BigDecimal(5));

norm5.setTname("合并指标3");

norm5.setTcode("代码5");

norm5.setCreateTime(new Date());

norm5.setStrDefault1("朝阳");

norm5.setStrDefault2("沙河");

Norm norm6 = new Norm();

norm6.setTid(new BigDecimal(6));

norm6.setTname("合并指标6");

norm6.setTcode("代码6");

norm6.setCreateTime(new Date());

norm6.setStrDefault1("中国");

norm6.setStrDefault2("美国");

Norm norm7 = new Norm();

norm7.setTid(new BigDecimal(1));

norm7.setTname("合并指标1");

norm7.setTcode("代码1");

norm7.setCreateTime(new Date());

norm7.setStrDefault1("昌平");

norm7.setStrDefault2("大兴");

Norm norm8 = new Norm();

norm8.setTid(new BigDecimal(2));

norm8.setTname("合并指标1");

norm8.setTcode("代码2");

norm8.setCreateTime(new Date());

norm8.setStrDefault1("昌d平");

norm8.setStrDefault2("大d兴");

Norm norm9 = new Norm();

norm9.setTid(new BigDecimal(3));

norm9.setTname("合并指标10");

norm9.setTcode("代码3");

norm9.setCreateTime(new Date());

norm9.setStrDefault1("咸阳d");

norm9.setStrDefault2("杨d凌");

Norm norm10 = new Norm();

norm10.setTid(new BigDecimal(4));

norm10.setTname("合并指标10");

norm10.setTcode("代码3");

norm10.setCreateTime(new Date());

norm10.setStrDefault1("齐f齐哈尔");

norm10.setStrDefault2("哈f尔冰");

Norm norm11 = new Norm();

norm11.setTid(new BigDecimal(5));

norm11.setTname("合并指标16");

norm11.setTcode("代码5");

norm11.setCreateTime(new Date());

norm11.setStrDefault1("朝f阳");

norm11.setStrDefault2("沙f河");

Norm norm12 = new Norm();

norm12.setTid(new BigDecimal(6));

norm12.setTname("合并指标16");

norm12.setTcode("代码6");

norm12.setCreateTime(new Date());

norm12.setStrDefault1("中v国");

norm12.setStrDefault2("美f国");

list.add(norm1);

list.add(norm2);

list.add(norm3);

list.add(norm4);

list.add(norm5);

list.add(norm6);

list.add(norm7);

list.add(norm8);

list.add(norm9);

list.add(norm10);

list.add(norm11);

list.add(norm12);

return list;

}

8.页面效果图

问题:

1.页面不显示数据,后台数据格式有问题(如果是前台分页,后台数据返回LIst就可以,如果是后台分页,返回数据格式是rows+tatol)

2.页面点击下一页,数据没有合并,没有绑定页面大小变化,数据重新加载,解决

onPageChange: function () {//当页面更改页码或页面大小时触发

var data = $('#table').bootstrapTable('getData', true);

mergeCells(data, "tname", 1, $('#table'));

mergeCells(data, "tcode", 1, $('#table'));//行合并

},

3.合并后数据居中显示,属性使用不对,正确属性

4. colspan(列)  rowspan(行)

bootstraptable合并标题_Bootstrap-table 单元格合并 、表头合并相关推荐

  1. easyExcel导入导出(列锁定单元格、表头合并、导出类型限制、锁定单元格增加底色、设置密码、隐藏列等)

    easyexcel官网文档:https://www.yuque.com/easyexcel/doc/easyexcel easyexcel {maven 版本} GitHub网址:https://gi ...

  2. 利用Python做excel文本合并(根据左侧单元格,快速合并右侧单元格内容)

    前言:昨天获得一个数据处理的小需求,比较简单,用VBA也能做,不过最近Python用的比较多,所以用Python写了,效率也很快. 需求: 有一张总表,如下图所示 需要根据左侧的工号和姓名,合并右侧获 ...

  3. Element Table 单元格中嵌套表格(Table) 合并行效果

    在Element中实现表格合并行功能一般是通过自定义span-method方法,此方法要求表格数据源中需要合并行的单元格中数据相同,根据相同数据来实现合并算法. 本例通过在父Table单元格中嵌套子T ...

  4. Vue.js 根据数据,进行Table单元格合并

    Vue.js 根据数据,进行Table单元格合并 ITKouSyou 2018-10-16 14:29:40  3493  收藏 2 展开  表格代码 <table cellspacing=&q ...

  5. Easypoi 导出excel 使用注解实现一二级标题行的单元格合并

    Easypoi 导出excel 使用注解实现一二级标题行的单元格合并 先看一下最终效果图 上代码 Excel 模板实体类 @Data public class HxAdvisoryZJEndExcel ...

  6. Markdown_合并表格中的单元格

    转载:Markdown合并单元格 Markdown本身不提供单元格合并语法,但是,Markdown是兼容HTML的,因此,我们可以通过HTML的方式实现单元格合并. colspan:规定单元格可占据的 ...

  7. excel单元格内容拆分_Excel批量合并相同内容的单元格

    因为我平常工作中整理数据会经常需要批量合并单元格,所以我各处学习,整理了如下批量合并相同内容单元格的方法,以下有WPS的应用截图,也有excel的应用截图,但原理是一样的,供大家参考. 在日常办公中经 ...

  8. element ui el-table单元格按需合并

    从来没有好好地有条理的整理过代码,也是因为没有信心能写好,今天心血来潮写一篇尝试一下. 问题描述 element ui 中 el-table 按需合并单元格 本文中代码举例,根据 project_na ...

  9. html 单元格拆分及合并,表格合并和拆分.html

    拆分与合并 table { margin: 50px auto 10px; } td { width: 100px; height: 100px; text-align: center; } td.a ...

  10. Excel函数 - 批量合并相同内容的单元格

    问题:如下图所示,我想把相同的种类合并到1个单元格中.由图1变为图2. 第一步:我们在C列标题行下面的第一行(即c2单元格)写下这样的公式"=IF(A2=A1,C1,C1+1) " ...

最新文章

  1. jquery中ajax参数说明
  2. java解压gz文件
  3. Linux(10)--上一级路径、nano、切换su、查看用户、修改目录的读写权限
  4. 第十三届蓝桥杯青少年STEMA(2021.08-2021.03)C++
  5. Unreal Engine 4 —— 多线程任务构建
  6. 新概念英语(1-37)Making a bookcase
  7. 两种include方式及filter中的dispatcher解析
  8. 项目管理综述(需要完善)
  9. GoogleTest测试框架介绍(一)
  10. Postman Sandbox
  11. 银行卡所属银行的查询接口--阿里提供
  12. 六、系统架构 - 高可用架构设计
  13. c# Thread 线程详细讲解
  14. AJAX入门,什么是AJAX?为什么要用AJAX?如何使用AJAX?
  15. 花 1 小时,开源设计 LoRa 继电器开关
  16. HTML+CSS实现带按钮的弹出框
  17. css 金额千位符,css3 - 使用C格式化数字(小数位,千位分隔符等)
  18. MySql小白常用语法
  19. HTML(2)—标题、段落及样式
  20. java常用类(Math数学类)

热门文章

  1. 干货 | 公众号历史文章精选(附资源)
  2. hangfire 过期记录_韩剧丨顶楼、空洞、再次十八岁、僵尸侦探、青春记录
  3. Go进阶(7): JSON 序列化和反序列化
  4. 3DSlicer16:数据类型MRML
  5. Javascript之预加载图片
  6. c语言函数用指针传递参数问题
  7. C/C++中单井号与双井号的使用
  8. 浅析ASP.NET的Page.IsPostBack 属性http://www.sina.com.cn 2008年05月06日 11:33 IT168.com
  9. Makefile使用规则
  10. 2020-10-29