antd动态的表格合并(包含排序功能)
主要是两个步骤,
1.处理接口返回数据,给其添加两个属性,一个是合并行数(列数),一个是当前数据的序号
2.在columns结合antd官网的处理方法合并表格
3.尽可能得减少计算量
数据处理函数
/**
* 表单表头合并
* @param list 需要遍历的数组
* @param key 合并依赖的字段名
*/
//主要赋予两个属性,一个是total:该条数据占几行 number:该条数据的序号
export const getTotal = (list, key) => {
let number = 0;
let lastMenber = 0;
list?.map((item, index) => {
if (index !== 0 && index !== list.length - 1) {
if (item[key] != list[index - 1][key]) {
if (number === 0) {
//total表示该数据占几行
list[0].total = index;
lastMenber = index;
} else {
list[lastMenber].total = index - lastMenber;
lastMenber = index;
}
number += 1;
} else {
item.total = 0;
}
} else if (index === list.length - 1) {
if (index !== 0 && item[key] != list[index - 1][key]) {
list[lastMenber].total = list.length - 1 - lastMenber;
item.total = 1;
lastMenber = 0;
number += 1;
} else {
list[lastMenber].total = list.length - lastMenber;
lastMenber = 0;
}
}
//number表示序号
item.number = number;
});
return list;
};
columns(哪些字段需要合并的,就加上render去处理)
const columns = [
{
title: '序号',
dataIndex: 'rowNo',
key: 'rowNo',
render: (text, record, index) => {
const obj = {
children: record.number + 1,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '地址',
dataIndex: 'address',
key: 'address',
render: (text, record) => {
const content = (
<span
style={{ color: '#00aa4f', border: 0, cursor: 'pointer' }}
>
{text}
</span>
);
const obj = {
children: content,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '姓名',
dataIndex: 'name',
key: 'name',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '性别',
dataIndex: '性别',
key: '性别',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '年龄',
dataIndex: 'age',
key: 'age',
render: (text, record) => {
const obj = {
children: text,
props: {},
};
if (record.total) {
obj.props.rowSpan = record.total;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: '当前状态',
dataIndex: 'status',
key: 'status',
},
{
title: '结果',
dataIndex: 'result',
key: 'result',
},
];
table组件(合并所有姓名相同的数据)
<Table
columns={columns}
dataSource={getTotal(list, 'name')}
></Table>
antd动态的表格合并(包含排序功能)的更多相关文章
- [转载]EasyUI中数据表格DataGrid添加排序功能
我们这里演示的是EasyUI数据表格DataGrid从服务器端排序功能,因为觉的本地数据排序没有多大的作用,一般我们DataGrid不会读取全部数据,只会读取当前页的数据,所以本地数据排序也只是对当前 ...
- JS动态生成表格后 合并单元格
JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...
- JS实现前台表格排序功能
JS实现前台表格排序功能 虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二: 一是代码简单:二是前台JS排序对于有分页的情况无法处理. 前段时间,有个功能需 ...
- Python实现EXCEL表格的排序功能
EXCEL的数值排序功能还是挺强大的,升序.降序,尤其自定义排序,能够对多个字段进行排序工作. 那么,在Python大法中,有没有这样强大的排序功能呢?答案是有的,而且本人觉得Python的排序功能, ...
- 关于表格合并span-method方法的补充(表格数据由后台动态返回)
之前写了一些关于element-ui表格合并的方法,不过用的数据都是确定的数据(死数据),但是很多时候我们的数据都是通过后台获得的,数据不稳定,这个时候使用表格合并就需要先处理一下数据,先看一下一种很 ...
- QTableWidget表格合并若干问题及解决方法
Qt提供 QTableWidget作为表格的类以实现表格的基本功能,表格中所装载的每一个单元格由类QTableWidgetItem提供.这是基于表格实现 Qt提供的一个基础类,若想实现定制表格和单元格 ...
- MVC5 Entity Framework学习参加排序、筛选和排序功能
上一篇文章实现Student 基本的实体CRUD操作.本文将展示如何Students Index页添加排序.筛选和分页功能. 以下是排序完成时.经过筛选和分页功能截图,您可以在列标题点击排序. 1.为 ...
- js如何动态创建表格(两种方法)
js如何动态创建表格(两种方法) 一.总结 一句话总结: 1.方法一:写好创建表格的html代码,将之赋值给div的innerHTML. 2.方法二.直接用创建好的table元素的方法insertRo ...
- EasyUI-DataGrid多线动态实现选择性合并
jQuery EasyUI有一个非常易于使用的数据列表控件,这是DataGrid控制.某些背景json格式可以传递给在前景中显示的控制,很强大.只要有时需求须要这样即多行合并,如在列表中假设同样的部门 ...
随机推荐
- [hdu6987]Cycle Binary
定义$x$为$s$的周期,当且仅当$\forall 1\le i\le |s|-x,s_{i}=s_{i+x}$(字符串下标从1开始) 令$per(s)$为$s$的正周期构成的集合,$\min p ...
- salesforce零基础学习(一百零九)Lightning Login启用以及配置
本篇参考:https://help.salesforce.com/s/articleView?id=sf.security_ll_overview.htm&type=5 我们在之前的篇中提到过 ...
- JAVA特点及安装卸载
C语言特点 1972 贴近硬件,运行速度快,效率高 操作系统,数据库,网络系统,编译器 指针和内存管理 C++语言特点 1982 面向对象 兼容C 图形领域,游戏等 Java语言特点 简单性 面向对象 ...
- [yLOI2018] 锦鲤抄
先思考图上是\(tag\)的特殊情况. 考虑我们按拓扑序反过来操作,就可以得到我们任意想要的顺序. 那么我们把所有的图都缩点操作,那么我们只需要考虑一个联通分量里就行了. 一个联通分量最后只会剩下一个 ...
- [省选联考 2021 A/B 卷] 宝石
大概是一眼看出来是这个给定序列在树上序列上按顺序跑最大匹配. 然后考虑维护向上和向下的链的值. 大概的做法是用倍增维护,考虑\(f_{u,i}\)是\(c_u\)在序列里的位置向后匹配\(2^i\)位 ...
- Codeforces 1129D - Isolation(分块优化 dp)
Codeforces 题目传送门 & 洛谷题目传送门 又独立切了道 *2900( 首先考虑 \(dp\),\(dp_i\) 表示以 \(i\) 为结尾的划分的方式,那么显然有转移 \(dp_i ...
- DTOJ 1561: 草堆摆放
题目描述 FJ买了一些干草堆,他想把这些干草堆分成N堆(1<=N<=100,000)摆成一圈,其中第i堆有B_i数量的干草.不幸的是,负责运货的司机由于没有听清FJ的要求,只记住分成N堆摆 ...
- [R] 保存pheatmap图片对象到文件
一般我们使用pheatmap通过Rstudio交互得到的图片在plots的Export导出即可,如何保存对象到文件呢?这个需求在自动化流程中很常见,作者似乎也没说明. 生成示例数据: test = m ...
- 执行脚本source 和 . 和sh 的区别是什么
"source"和"."的功能是一样的,可以调用脚本,并将脚本里的函数也传递到当前的脚本或者解释器中,即不会开启新的bash而是在当前bash中运行. &quo ...
- 毕业设计之dns搭建:
[apps@dns_sever ~]$ sudo yum install -y bind [apps@dns_sever ~]$ sudo vim /etc/named.conf // // name ...