在Antd表格中,可以使用rowSpan
和colSpan
属性来动态合并单元格,从而实现数据分组的效果。以下是一个示例代码,演示了如何根据动态数据进行分组:
import React from 'react';
import { Table } from 'antd';
const data = [
{
name: 'Group A',
children: [
{ name: 'John', age: 28 },
{ name: 'Tom', age: 26 },
],
},
{
name: 'Group B',
children: [
{ name: 'Alice', age: 24 },
{ name: 'Bob', age: 22 },
],
},
];
const columns = [
{
title: 'Group',
dataIndex: 'name',
key: 'name',
render: (text, record, index) => {
const obj = {
children: text,
props: {},
};
// 如果是当前分组的第一个记录,则计算行数并设置rowSpan属性
if (index === 0 || text !== data[index - 1].name) {
obj.props.rowSpan = data.filter(item => item.name === text).length;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: 'Name',
dataIndex: 'children',
key: 'name',
render: (text, record, index) => {
const obj = {
children: text[0].name,
props: {},
};
// 如果是当前分组的第一个记录,则计算行数并设置rowSpan属性
if (index === 0 || text[0].name !== data[index - 1].children[0].name) {
obj.props.rowSpan = text.length;
} else {
obj.props.rowSpan = 0;
}
return obj;
},
},
{
title: 'Age',
dataIndex: 'children',
key: 'age',
render: (text) => text[0].age,
},
];
const GroupedTable = () => {
return
;
};
export default GroupedTable;
在上述代码中,我们定义了一个包含分组数据的data
数组,每个分组有一个name
属性和一个children
属性。columns
数组定义了表格的列,其中render
函数用于动态计算合并单元格的行数和设置rowSpan
属性。
在render
函数中,我们使用了filter
函数来找到当前分组的所有记录,然后根据记录的索引和值的变化,设置rowSpan
属性。如果是当前分组的第一个记录,则计算行数并设置rowSpan
属性;否则,设置rowSpan
为0,表示不合并单元格。
最后,我们将dataSource
和columns
传递给Table
组件,即可渲染出分组效果的表格。