Devextreme dxDataGrid计算列依赖问题:基于已计算列的列值为空
DevExtreme dxDataGrid依赖计算列的实现问题
不是无法定义依赖其他计算列的计算列,你遇到的单元格为空问题,是因为calculateCellValue方法中无法直接通过rowData访问其他计算列的结果——计算列的值不会被自动存入数据源的rowData对象,而是实时计算返回的。
解决方法有两种:
1. 直接复用依赖列的计算逻辑
在D列的calculateCellValue里,不依赖C列的结果,而是直接计算(A+B)*2:
columns = [ { dataField: 'A', caption: '列A' }, { dataField: 'B', caption: '列B' }, { caption: '列C', calculateCellValue: (rowData) => rowData.A + rowData.B }, { caption: '列D', calculateCellValue: (rowData) => (rowData.A + rowData.B) * 2 } ];
2. 抽离公共计算逻辑复用
如果C列的计算逻辑复杂,不想重复代码,可以把计算C的逻辑抽成单独函数,让C和D列都调用这个函数:
// 抽离计算C值的公共方法 private calculateCValue(rowData: any): number { // 这里可以写复杂的计算逻辑 return rowData.A + rowData.B; } columns = [ { dataField: 'A', caption: '列A' }, { dataField: 'B', caption: '列B' }, { caption: '列C', calculateCellValue: this.calculateCValue.bind(this) }, { caption: '列D', calculateCellValue: (rowData) => this.calculateCValue(rowData) * 2 } ];
为什么原方式失效?
当你尝试在D列的calculateCellValue中访问rowData.C时,由于C是计算列,它的结果并未被保存到rowData对象里,所以得到的是undefined,最终导致单元格显示为空。
内容的提问来源于stack exchange,提问作者A J Qarshi
相关产品推荐
相关产品推荐

