简化我有一个cxGrid,我输入开始时间和结束时间。我需要的是一个函数,当我更改其中一个值时,计算差异并将其存储在第三列
我无法找到正确的方法。
答案 0 :(得分:1)
我猜你已经为列分配了某种属性编辑器(可能是DateEdit)。
鉴于此,您可以尝试在属性编辑器的OnValidate事件中使用以下代码:
var
ValueThirdCol : variant;
RecordIndex : integer;
begin
RecordIndex := myView.DataController.FocusedRecordIndex;
ValueThirdCol := myView.DataController.GetValue(RecordIndex, MyEndDateCol.Index) - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
myView.DataController.SetValue(RecordIndex, myDifCol.Index, ValueThirdCol);
end;
请注意,您可能需要稍微调整一下此代码,具体取决于您是否将GridMode或DataModeController.SyncMode设置为true,以及在必要时使用DisplayValue,但基本构思应该有效。
编辑:属性编辑器的OnValidate事件发生之前将显示值转换为编辑值。这就是为什么我提供的代码必须进行调整的原因。
为了使代码有效,您需要使用(对于要修改的列)事件提供的DisplayValue参数,而不是GetValue返回的值。
例如,如果EndDateCol是触发OnValidate的列,那么代码应为
ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
HTH