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

SfDataGrid分组状态下无法正确获取行数据的问题

解决SfDataGrid分组状态下获取行数据错位问题

问题根源

分组后SfDataGrid的渲染行包含分组标题行,而你的数据源_jobHisRowData仅存储原始数据行,两者长度和索引无法直接对应。直接用rowIndex-1取数据会受分组标题行干扰,导致索引错位。

两种可行解决方案

方案1:直接通过details.rowData获取当前行数据

这是最简洁的方式,rowData直接指向当前点击的DataGridRow(仅数据行有有效值,分组标题行的rowData为null),无需手动计算索引:

修改onCellTap代码:

onCellTap: (details) {
  // 过滤分组标题行和目标列以外的点击
  if (details.rowColumnIndex.columnIndex == 2 && details.rowData != null) {
    // 直接从rowData中获取对应列的值
    final targetCell = (details.rowData as DataGridRow).getCells().elementAt(2);
    log(targetCell.value.toString());
  }
},

方案2:映射到原始数据源的JobHistory对象

如果需要获取完整的JobHistory实体,可以通过数据源的rows列表找到对应索引:

onCellTap: (details) {
  if (details.rowColumnIndex.columnIndex == 2 && details.rowData != null) {
    // 找到当前DataGridRow在原始数据源中的索引
    final dataRowIndex = source.rows.indexOf(details.rowData as DataGridRow);
    if (dataRowIndex != -1) {
      // 获取对应的JobHistory对象
      final jobHistory = source.jobHisData[dataRowIndex];
      log(jobHistory.item.toString()); // 输出Item列的值
    }
  }
},

关键注意事项

  • 必须判断details.rowData != null,避免点击分组标题行时出现空指针异常
  • 不要直接使用details.rowColumnIndex.rowIndex映射原始数据源,因为该索引包含了分组标题行的位置
  • 数据源的effectiveRows属性是网格实际渲染的所有行(含分组标题),而rows属性是原始数据行,两者要区分使用

内容的提问来源于stack exchange,提问作者Miraj Hossain Shawon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:59:56