簡略化開始時刻と終了時刻を入力するcxGridがあります。必要なのは、これらの値の1つを変更すると、差を計算して3番目の列に格納する関数です。
私はこれを行う正しい方法を見つけるのに苦労しています。
簡略化開始時刻と終了時刻を入力するcxGridがあります。必要なのは、これらの値の1つを変更すると、差を計算して3番目の列に格納する関数です。
私はこれを行う正しい方法を見つけるのに苦労しています。
ある種のプロパティエディタ(おそらく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イベントは、表示値を編集値に変換する前に発生します。それが、私が提供したこのコードを微調整しなければならなかった理由です。
コードが機能するためには、GetValueによって返される値の代わりに、イベントによって提供されるDisplayValue引数を(変更される列に対して)使用する必要があります。
たとえば、EndDateColがOnValidateをトリガーした列である場合、コードは次のようになります。
ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
HTH