cxGrid在您键入时计算

时间:2012-07-01 09:52:46

标签: delphi grid devexpress vcl

简化我有一个cxGrid,我输入开始时间和结束时间。我需要的是一个函数,当我更改其中一个值时,计算差异并将其存储在第三列

我无法找到正确的方法。

1 个答案:

答案 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