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格式可以传递给在前景中显示的控制,很强大.只要有时需求须要这样即多行合并,如在列表中假设同样的部门 ...
随机推荐
- python 函数的定义及调用语法,map 方法,函数嵌套递归
1.什么是函数 开发程序时候,需要代码执行多次,为了提高编写效率及代码重用性,所以把具有独立功能的代码块组织为一个小模块,给这个功能一个名称,这就是函数. 函数可以使用系统自带的函数也可以 ...
- 解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法
出现异常"The last packet sent successfully to the server was 0 milliseconds ago."的大部分原因是由于数据库回 ...
- Error filterStart
一般原因为:1.xml配置失误filter应配置在servlet-mapping前面(应该都知道吧).看看class配的 别找不到.2.filter中某段代码未实例化(这个情况是出现最多的,要仔细检查 ...
- OWASP-Top5-(Security Misconfiguration 安全配置错误)
概述 从上一版的第 6 位开始,90% 的应用程序都经过了某种形式的错误配置测试.随着更多转向高度可配置的软件,看到这一类别上升也就不足为奇了.值得注意的CWE包括CWE-16 Configurati ...
- 快速从零开始整合SSM,小白包会(1)
整合SSM,关键就是几个xml的配置. 准备: 1. Idea(配置好tomcat,可以安装插件freeMybatis,提高效率,安装插件不难,百度经验就有) 2. 下载好数据库MySql,以 ...
- [cf1103E]Radix sum
类似于uoj272,即$B=10$的情况,然后有以下几个细节问题: 1.答案对$2^{58}$取模可以先使用自然溢出模$2^{64}$,最后对$2^{58}$取模即可 2.为了避免实数,令$\omeg ...
- [atARC085F]NRE
令$(S_{a},S_{b})$表示$a_{i}\in S_{a}$且$b_{i}\in S_{b}$的i个数,那么答案相当于$S(0,1)+S(1,0)=S(0,1)+S(\{0,1\},0)-S( ...
- mabatis的mapper文件找不到-ssm升级maven常见问题
手里项目之前是普通ssm的,打算用业余时间升级一把. 1.首先,搭建好maven的ssm项目. 2.配置好jdk,tomcat环境,先启动. 3.启动没问题后将maven目录结构布置好后直接将原有项目 ...
- [省选联考 2021 A/B 卷] 宝石
大概是一眼看出来是这个给定序列在树上序列上按顺序跑最大匹配. 然后考虑维护向上和向下的链的值. 大概的做法是用倍增维护,考虑\(f_{u,i}\)是\(c_u\)在序列里的位置向后匹配\(2^i\)位 ...
- 26-Palindrome Number
回文数的判定,不使用额外的空间 Determine whether an integer is a palindrome. Do this without extra space. 思路:将一个整数逆 ...