如何在React版AG Grid中实现单元格同时跨2行2列?
如何在React版AG Grid中实现单元格同时跨2行2列?
嘿,我懂你这种找不到组合示例的头疼!官方文档里行跨、列跨的单独例子一抓一大把,但把俩放一块儿的确实少见。我帮你调整下代码,实现同时跨2行2列的效果,顺便给你拆解下关键逻辑~
要在AG Grid里实现单元格同时跨行跨列,核心是要同时配置列跨度(colSpan)和行跨度(rowSpan),还要处理好其他被覆盖单元格的隐藏(通过设置colSpan: 0或者rowSpan: 0),确保不会出现布局错乱。
给你调整后的可运行代码:
import { useState } from "react"; import { AgGridReact } from "ag-grid-react"; const SpanningGrid = () => { const [rowData] = useState([ { id: 1, field1: "Test" }, { id: 2, field1: "Test" }, { id: 3, field1: "Normal" }, // 加一行普通数据方便对比效果 ]); const gridOptions = { columnDefs: [ { headerName: "Col1", field: "field1", spanRows: true, // 启用行跨功能开关 // 列跨度:符合条件的单元格跨2列 colSpan: (params) => { const isTargetCell = params.data.field1 === "Test" && params.node.rowIndex === 0; return isTargetCell ? 2 : 1; }, // 行跨度:符合条件的单元格跨2行 rowSpan: (params) => { const isTargetCell = params.data.field1 === "Test" && params.node.rowIndex === 0; return isTargetCell ? 2 : 1; }, // 可选:给跨越多的单元格加个样式,更直观 cellStyle: (params) => { const isTargetCell = params.data.field1 === "Test" && params.node.rowIndex === 0; return isTargetCell ? { backgroundColor: "#f0f8ff", textAlign: "center" } : {}; }, }, { headerName: "Col2", // 处理被覆盖的单元格:前两行的Col2直接隐藏 colSpan: (params) => { if (params.data.field1 === "Test" && params.node.rowIndex <= 1) { return 0; // 返回0表示隐藏该单元格 } return 1; }, }, { headerName: "Col3", // 新增普通列,方便观察整体布局 field: "field1", }, ], enableCellSpan: true, // 全局开关:必须开启才能让单元格跨度生效 }; return ( <div style={{ height: 300, width: 600 }}> <AgGridReact gridOptions={gridOptions} rowData={rowData} /> </div> ); }; export default SpanningGrid;
关键逻辑拆解:
- 全局开关必须开:
enableCellSpan: true是所有单元格跨度功能的基础,没开的话啥效果都出不来; - 目标单元格双跨度配置:在要跨行跨列的列(Col1)里,通过
colSpan返回2实现跨2列,rowSpan返回2实现跨2行,同时用rowIndex和数据内容锁定目标单元格(这里是第一行的Test单元格); - 被覆盖单元格隐藏:前两行的Col2被目标单元格覆盖了,所以通过
colSpan: 0让它们隐藏,避免布局重叠; - 可选样式优化:给跨越多的单元格加个背景色和居中,能更直观看到跨度效果,实际项目里可以根据自己的UI需求调整。
如果你的数据是分组式的重复内容(比如多组相同field1的行),还可以把rowIndex的判断改成基于数据分组的逻辑,比如对比当前行和上下行的field1值,动态计算跨度,适配更多场景~
内容来源于stack exchange
相关产品推荐
相关产品推荐

