You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何为MUI DataGrid表格设置隔行变色效果?

解决MUI DataGrid交替行变色问题

实现步骤

1. 为DataGrid添加行类名判断

修改DataGrid组件,通过rowClassName回调函数根据行ID判断奇偶行,分配不同的CSS类:

<DataGrid 
  rows={rows} 
  columns={columns}
  rowClassName={(params) => params.id % 2 === 0 ? 'even-row' : 'odd-row'}
/>

2. 添加CSS样式

在App.css中补充以下样式,确保覆盖DataGrid默认行样式:

.box .MuiDataGrid-row.odd-row {
  background-color: #36384f;
}

.box .MuiDataGrid-row.even-row {
  background-color: #40425a;
}

/* 可选:移除默认行hover样式,保持统一风格 */
.box .MuiDataGrid-row:hover {
  background-color: inherit;
}

修改后的完整代码

组件代码

import Box from '@mui/material/Box';
import { GridColumns, DataGrid } from '@mui/x-data-grid';
import "../../css/App.css";

const columns: GridColumns = [
    {
      field: 'Symbol',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'Side',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'Broker',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'OrderStatus',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'OrderQty',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'Cumulative',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'OrderType',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
    {
      field: 'Account',
      headerClassName: 'super-app-theme--header',
      headerAlign: 'center',
      width: 140,
      cellClassName: 'super-app-theme--cell',
    },
  ];
  
const rows=[
    {id: 1, Symbol:'INR', Side:'Buy', Broker:'Steve', OrderStatus:'New', OrderQty:2, Cumulative:'-', OrderType:'Buy', Account:'Account 1'},
    {id: 2, Symbol:'INR', Side:'Sell', Broker:'John', OrderStatus:'New', OrderQty:3, Cumulative:'-', OrderType:'Sell', Account:'Account 2'},
    {id: 3, Symbol:'INR', Side:'Buy', Broker:'Alex', OrderStatus:'New', OrderQty:4, Cumulative:'-', OrderType:'Buy', Account:'Account 3'},
    {id: 4, Symbol:'INR', Side:'Sell', Broker:'Smith', OrderStatus:'New', OrderQty:5, Cumulative:'-', OrderType:'Sell', Account:'Account 1'},
    {id: 5, Symbol:'INR', Side:'Buy', Broker:'Harry', OrderStatus:'New', OrderQty:6, Cumulative:'-', OrderType:'Buy', Account:'Account 2'},
    {id: 6, Symbol:'INR', Side:'Sell', Broker:'Johnson', OrderStatus:'New', OrderQty:7, Cumulative:'-', OrderType:'Sell', Account:'Account 3'},
    {id: 7, Symbol:'INR', Side:'Buy', Broker:'Peter', OrderStatus:'New', OrderQty:8, Cumulative:'-', OrderType:'Buy', Account:'Account 1'},
    {id: 8, Symbol:'INR', Side:'Sell', Broker:'David', OrderStatus:'New', OrderQty:4, Cumulative:'-', OrderType:'Sell', Account:'Account 2'}
];
  
export default function Table() {
  return (
    <Box className="box"
      sx={{
        height: 550,
        width: 1122,
      }}
    >
      <DataGrid 
        rows={rows} 
        columns={columns}
        rowClassName={(params) => params.id % 2 === 0 ? 'even-row' : 'odd-row'}
      />
    </Box>
  );
}

CSS样式(App.css)

.box{
  margin-left: 100px; 
  background-color: #36384f;   
  color: white;
  margin-top: 10px;  
}

.box .MuiDataGrid-row.odd-row {
  background-color: #36384f;
}

.box .MuiDataGrid-row.even-row {
  background-color: #40425a;
}

.box .MuiDataGrid-row:hover {
  background-color: inherit;
}

说明

  • 若行ID不是连续自增格式,可改用params.index判断(index从0开始,index % 2 === 0对应第一行)
  • 嵌套选择器.box .MuiDataGrid-row用于提高样式优先级,确保覆盖DataGrid默认行背景
  • 移除hover样式为可选操作,可根据需求保留或调整

内容的提问来源于stack exchange,提问作者Avanish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:15:56