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
相关产品推荐
相关产品推荐

