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

如何在MUI X Data Grid排序时让Total行不参与排序

解决方案

方法1:拆分数据行和Total行,单独渲染

把Total行从数据源里单独拎出来,不让它进入DataGrid的rows数组,DataGrid只渲染普通数据行,Total行单独放在表格下方,这样排序完全不会影响它。

示例代码:

// 先拆分数据和Total行,假设你的Total行有个标识字段比如isTotal
const [dataRows, totalRow] = useMemo(() => {
  const total = dataSource.find(row => row.isTotal);
  const rows = dataSource.filter(row => !row.isTotal);
  return [rows, total];
}, [dataSource]);

// 渲染时分开处理
return (
  <div style={{border: '1px solid #eee'}}>
    <DataGrid
      rows={dataRows}
      columns={dataColumns}
      // 其他原有属性保持不变
    />
    {/* 自定义Total行,样式对齐DataGrid */}
    <div style={{display: 'flex', padding: '10px 16px', borderTop: '1px solid #eee', fontWeight: 'bold'}}>
      {dataColumns.map(col => (
        <div key={col.field} style={{width: col.width || '150px'}}>
          {col.field === 'Total' ? totalRow?.Total : 'Total'}
        </div>
      ))}
    </div>
  </div>
);

方法2:自定义排序比较器

给需要排序的列设置自定义排序逻辑,在比较时把Total行固定到最后(或你想要的位置)。

示例代码:

// 自定义排序函数,假设Total行的type字段为'total'
const sortWithoutTotal = (val1, val2, cellParams1, cellParams2) => {
  // 如果其中一行是Total,直接让它排后面
  if (cellParams1.row.type === 'total') return 1;
  if (cellParams2.row.type === 'total') return -1;
  // 正常排序逻辑,数字类型直接比较,字符串可以转成对应格式再比
  return val1 - val2;
};

// 在列配置里给需要排序的列加上这个比较器
const dataColumns = [
  // 其他列配置...
  {
    field: 'Total',
    sortable: true,
    sortingComparator: sortWithoutTotal,
  },
  // 其他需要排序的列也可以复用这个函数
];

// 正常渲染DataGrid即可
<DataGrid
  rows={dataSource}
  columns={dataColumns}
  // 原有属性不变
/>

方法3:用DataGrid Pro的Footer插槽(Pro版专属)

如果用的是DataGrid Pro,可以直接用官方提供的footer插槽来渲染Total行,它会固定在表格底部,完全不受排序、分页影响:

<DataGridPro
  rows={dataSource.filter(row => row.type !== 'total')}
  columns={dataColumns}
  slots={{
    footer: () => (
      <div style={{padding: '10px 16px', fontWeight: 'bold', borderTop: '1px solid #eee'}}>
        {/* 对应列的Total内容,比如: */}
        <span style={{width: '150px', display: 'inline-block'}}>Total</span>
        <span style={{width: '150px', display: 'inline-block'}}>{totalRow?.Total}</span>
        {/* 其他列对应内容 */}
      </div>
    ),
  }}
/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:08:11