0

簡略化開始時刻と終了時刻を入力するcxGridがあります。必要なのは、これらの値の1つを変更すると、差を計算して3番目の列に格納する関数です。

私はこれを行う正しい方法を見つけるのに苦労しています。

4

1 に答える 1

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イベントは、表示値を編集値に変換する前に発生します。それが、私が提供したこのコードを微調整しなければならなかった理由です。

コードが機能するためには、GetValueによって返される値の代わりに、イベントによって提供されるDisplayValue引数を(変更される列に対して)使用する必要があります。

たとえば、EndDateColがOnValidateをトリガーした列である場合、コードは次のようになります。

ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);

HTH

于 2012-07-02T15:20:52.657 に答える