Ant Design之表格动态合并行

ant-design 表格动态行合并 { title: '模板名称', ellipsis: true, dataIndex: 'settTariffTemplateName', key: 'settTariffTemplateName', align: 'center', //重点开始 customRender: (text, record, index) => { const obj = { children: text !== null ? text : '', 阅读详情

在web开发中,表格的行合并是一个很常见的需求。antd也提供了这种功能,但是文档中的示例代码却和我想象中的相差甚远,如下所示,它是通过一种很笨的办法实现的行合并。这样当表格的数据源是动态获取的,我们就没有办法动态的合并行。

官方代码

蚂蚁框架的官方文档代码,我的代码见最后


import { Table } from 'antd';

// In the fifth row, other columns are merged into first column
// by setting it's colSpan to be 0
const renderContent = (value, row, index) => {
  const obj = {
    children: value,
    props: {},
  };
  if (index === 4) {
    obj.props.colSpan = 0;
  }
  return obj;
};

const columns = [{
  title: 'Name',
  dataIndex: 'name',
  render: (text, row, index) => {
    if (index < 4) {
      return <a href="javascript:;">{text}</a>;
    }
    return {
      children: <a href="javascript:;">{text}</a>,
      props: {
        colSpan: 5,
      },
    };
  },
}, {
  title: 'Age',
  dataIndex: 'age',
  render: renderContent,
}, {
  title: 'Home phone',
  colSpan: 2,
  dataIndex: 'tel',
  render: (value, row, index) => {
    const obj = {
      children: value,
      props: {},
    };
    if (index === 2) {
      obj.props.rowSpan = 2;
    }
    // These two are merged into above cell
    if (index === 3) {
      obj.props.rowSpan = 0;
    }
    if (index === 4) {
      obj.props.colSpan = 0;
    }
    return obj;
  },
}, {
  title: 'Phone',
  colSpan: 0,
  dataIndex: 'phone',
  render: renderContent,
}, {
  title: 'Address',
  dataIndex: 'address',
  render: renderContent,
}];

const data = [{
  key: '1',
  name: 'John Brown',
  age: 32,
  tel: '0571-22098909',
  phone: 18889898989,
  address: 'New York No. 1 Lake Park',
}, {
  key: '2',
  name: 'Jim Green',
  tel: '0571-22098333',
  phone: 18889898888,
  age: 42,
  address: 'London No. 1 Lake Park',
}, {
  key: '3',
  name: 'Joe Black',
  age: 32,
  tel: '0575-22098909',
  phone: 18900010002,
  address: 'Sidney No. 1 Lake Park',
}, {
  key: '4',
  name: 'Jim Red',
  age: 18,
  tel: '0575-22098909',
  phone: 18900010002,
  address: 'London No. 2 Lake Park',
}, {
  key: '5',
  name: 'Jake White',
  age: 18,
  tel: '0575-22098909',
  phone: 18900010002,
  address: 'Dublin No. 2 Lake Park',
}];

ReactDOM.render(<Table columns={columns} dataSource={data} bordered />,
  mountNode);

动态合并行代码示例

因为在网上也没有找到合适的解决方案,所以把自己的实现分享出来,希望对大家有所帮助。

在线演示

表格数据中被合并的列应该是经过排序的,保证所有相同的行都呆在一起能够被合并


const { Table } = antd;

// In the fifth row, other columns are merged into first column
// by setting it's colSpan to be 0
const renderContent = (value, row, index) => {
  const obj = {
    children: value,
    props: {},
  };
  return obj;
};


const data = [{
  key: '1',
  name: 'A',
  age: 32,
  tel: '0571-22098909'
}, {
  key: '2',
  name: 'A',
  age:12,
  tel: '0571-22098333'
}, {
  key: '3',
  name: 'B',
  age: 32,
  tel: '0575-22098909'
}, {
  key: '4',
  name: 'B',
  age: 18,
  tel: '0575-22098909'
}, {
  key: '5',
  name: 'B',
  age: 18,
  tel: '0575-5'
}, {
  key: '6',
  name: 'C',
  tel: '0571-6',
  age:12
}, {
  key: '7',
  name: 'C',
  tel: '0571-7',
  age:19
}];

var myArray=new Array(data.length);

console.error(data.length);


var func =(data)=>{
  //保存上一个name
  var x = "";
  //相同name出现的次数
  var count = 0;
  //该name第一次出现的位置
  var startindex=0;
  
  for(var i = 0;i<data.length;i++){
    //这里是合并name列,根据各自情况大家可以自己完善
    var val = data[(i)].name;
    if(i==0){
      x=val;
      count=1;
      myArray[0]=1
    }else{
      if(val==x){
        count++;
        myArray[startindex]=count;
        myArray[i]=0
      }else{
        count = 1;
        x=val;
        startindex=i;
        myArray[i]=1
      }
    }
  }
}

func(data)
console.table(myArray)

const columns = [{
  title: 'Name',
  dataIndex: 'name',
  render: (value, row, index) => {
    const obj = {
      children: value,
      props: {},
    };
    obj.props.rowSpan = myArray[index];
    return obj
  },
}, {
  title: 'Age',
  dataIndex: 'age',
  render: renderContent,
}, {
  title: 'Home phone',
  dataIndex: 'tel',
  render: renderContent,
}];


ReactDOM.render(<Table columns={columns} dataSource={data} bordered />,
  mountNode);

Ant Design Table 实战:如何动态合并单元格并自动计算小计(附完整代码) 本文详细介绍了如何使用Ant Design Table组件实现动态合并单元格和智能小计功能,适用于企业级前端开发中的复杂表格需求。通过动态列渲染、数据分组预处理和嵌套表头等高级技巧,帮助开发者提升表格的可读性和功能性,并附有完整代码示例。 阅读详情

相关推荐

大模型训练显存瘦身全记录:从ZeRO-3参数分区到CPU Offload的硬件协奏曲

本文详细解析了如何通过ZeRO-3参数分区与CPU/NVMe卸载技术优化大模型训练的显存使用。结合bf16混合精度与梯度累积等策略,实现在消费级GPU上高效训练百亿参数模型,显著提升硬件利用率与训练效率。

weixin_29051245的博客 435

Ant design vue 表格合并 合并行 合并列

Ant design vue 合并单元格 合并行, 合并列

qq_51622532的博客 1万+

CS5511芯片实战:如何用DP转LVDS驱动高刷显示器(附配置代码)

本文详细解析了CS5511芯片在DP转LVDS高刷显示器驱动方案中的应用,包括核心架构、寄存器配置、时序优化及典型问题排查。通过实战案例和配置代码,帮助开发者快速实现120Hz高刷新率显示,特别适合医疗影像和工业HMI等严苛场景。

m3n5b7v8c9x的博客 1074

基于Vue + element制作扁平化树形结构渲染表格(动态行列合并,树结构算法应用)

1)扁平转树和树形转扁平,element-ui的表格组件从数组索引0开始渲染一直到最后,如果后端没有按照顺序传数据会导致表格错乱,所以我们需要将数据二次处理(扁平转树再转扁平),达到整理数据的效果//扁平转树if (!} else {});} else {});},//树转扁平// 将当前节点添加到结果数组中// 递归遍历子节点// 从每个根节点开始遍历},//重构数据},

m0_49083276的博客 3013

【GIS效率手册】告别C盘爆满:三步重置ArcMap默认地理数据库路径

本文针对ArcMap用户C盘空间常被占满的问题,提供了三步重置默认地理数据库路径的详细教程。通过修改地图文档属性,将数据存储位置从C盘迁移至其他驱动器,不仅能有效释放系统盘空间,还能提升数据管理效率与安全性,是GIS数据规范化管理的关键一步。

g2h3i4j5的博客 542

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

Antd表格之行/列合并

Antd--表格之行/列合并 注意:antd官方行/列合并参考:https://1x.ant.design/components/table/#components-table-demo-colspan-rowspan 表格行/列合并 表头只支持列合并,使用 column 里的 colSpan 进行设置。 表格支持行/列合并,使用 render 里的单元格属性 colSpan 或者 rowSpa...

cc_百川 2万+

【深度学习总结_02】在自己的数据集微调SAM

使用医疗影像数据微调SAM

qq_41234663的博客 1万+

解决ant-design-vue组件,行合并问题,动态行合并

解决ant-design-vue组件,行合并问题,动态行合并

qq_40513296的博客 1024

V90伺服 EPOS模式下回原(详细配置+SCL源代码)

/ 输出上限 100.0%rSetPoint : Real;// 设置目标值工程量。// 通道转换参考值。Td : Real;

RXXW_Dor的博客 2662

基于PCL的电力线点云提取与分割实现

本文基于PCL库实现电力线点云提取与分割,包含6个核心处理阶段:文件读取与结果文件夹创建、高程滤波分割候选点云、欧式聚类去噪、电力线分段提取、球形邻域搜索补全点云、最终分割与可视化保存。通过PCA计算点云线性特征(阈值0.91)筛选电力线点,采用欧式聚类(容忍度3.0)去除噪点,并针对不同规模聚类差异化设置球形搜索半径(4.0/6.0)补全点云。最终通过欧式聚类分割并可视化带颜色点云。算法对高程滤波阈值、聚类参数等具有敏感性,需根据点云特性调整优化。

weixin_45196569的博客 192

Ant Design 表格动态合并行

import React from "react"; import ReactDOM from "react-dom"; import "antd/dist/antd.css"; import "./index.css"; import { Table } from "antd"; // 后台返回数据(渲染Table) const data = [ { key: "1", ...

花易折的博客 2223

华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 成正方形的数量 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 5938

Vue + Ant Design 表格的“魔法”操作:动态列与行合并的终极指南

你是否遇到过需要动态生成表格列,并且还要合并某些行的需求?听起来像在玩“俄罗斯方块”,只不过这次我们堆的是数据!本文将带你深入 Vue 和 Ant Design 的“魔法”世界,手把手教你如何实现动态列生成与行合并。从后端数据处理到前端动态渲染,从性能优化到代码封装,我们将一步步拆解这个复杂需求。无论你是前端新手还是老手,这篇博客都能让你轻松掌握表格的“黑科技”。准备好迎接挑战了吗?点击进来,解锁 Vue 表格的终极操作!

yolo_link的博客 1290

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ant vue table表格数据动态合并

3.如果是一次性获取所有数据进行分页的话,计算columns的时候需要进行修改一下。1.在computed节点下动态计算每次要合并的行数。2.在methods节点下定义合并单元格的方法。

qq_46258819的博客 5806

精雕软件(JDpaint) 5.5 绿色版

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

Ant Design Vue 表格复杂数据合并单元格

表头只支持列合并,使用 column 里的 colSpan 进行设置。表格支持行/列合并,使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染。

睡不着的可乐博客 1597

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ant design vue 动态表格合并

ant design vue 动态表格合并 首先是想要达成的效果图片展示 List item // computed 计算属性 get detailCol() { return [ { title: 'HIS业务', children: [ { title: '结算单编号', dataIndex: 'settleCode', key: 'settleCod

Chase 学习专栏 1956

21-08-12-antv-合并单元格采坑之路

对于合并单元格不是很复杂的内容 手动处理起来相对于简单一些 官网提供的是使用customRender, 如果rowSpan 是动态 那么不建议把值放在data,return中去 放在代码外面去 比较好一点 放在return 也是可以 那么需要在data中 定义一个this data() { var columns = [ { title: "类别", dataIndex: "lb", customRender: this.ren

alo_ne的博客 815

ANT DESIGN VUE表格合并某一列

没合并之前: 合并之后: 官方文档: column 实现代码: 1 HTML 2在data中声明一下表格绑定的columns,datasource 3

flhhly的博客 1007

antd table合并行或者列(动态添加合并行、列)

antd table合并行或者列(动态添加合并行、列)

见贤思齐焉,见不贤内自省 1万+

ant-design React table表格组件合并展开错位解决

2. 修改Oncell方法,根据上面计算的sortRowSpan的值,多个相同的sort设置rowSpan等于它的个数,不需要合并的sort,rowSpan设置为0。4. 这时候问题基本解决了,展开和合并,第一列的合并没问题,但是最后一列又出现了错位,因为expandable展开的td的colspan默认和columns长度一致。我这种写法rowSpan是固定的,前面第一列的合并个数是固定的,而antd的展开是相当于增加了一整行,然后页面合并就会错位。我太菜,搞不定了,求助大佬。

weixin_45609894的博客 2119

Ant Design Vue 的表格数据,第一列项目区域,项目区域相同的行数据,第一列项目区域合并

通过上述方法,你可以轻松实现 Ant Design Vue 表格中根据“项目区域”动态合并单元格的功能。如果有其他需求或问题,请随时补充说明!在 Ant Design Vue 的表格中,如果需要根据第一列(如“项目区域”)的值进行动态合并,可以通过。以下是完整的代码示例,展示如何根据“项目区域”相同的行数据,合并第一列单元格。

lzping_719的专栏 720

ant design V3 实现table表格 添加底部合计行

实现atnd v3实现合计行

bangbDIV的博客 1462

Ant Design of Vue ui框架 表格合并数据展示

<template> <a-table :columns="testColumns" :data-source="testData"></a-table> </template> <script> //hideTb 隐藏掉显示td //childrenS 需要合并的子类,循环一遍摊开显示 const testData = [ { key: '1', name: 'John Brown', age: 32,.

CPan_的博客 586

react antd Table动态合并单元格

文章目录react antd Table动态合并单元格1、实现效果图2、实现方法3、方法在渲染时的应用 react antd Table动态合并单元格 1、实现效果图 2、实现方法 /** * 单元格合并处理 * @param text 当前单元格的值 * @param data 当前分页所有数据 * @param key 当前列的dataIndex * @param index 当前数据所在下标 * @returns {number} 待合并单元格数量 */ const

jiang_dady的博客 739
上一篇: Spring Boot2整合Shiro(2):用 BCrypt 加密密码
下一篇: React+antd:为表格添加成组标记
zhaodongxx
博客等级 码龄12年 116粉丝 26原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值