Saya kira Anda telah menetapkan semacam editor Properti (mungkin DateEdit) ke kolom tersebut.
Mengingat hal itu, Anda dapat mencoba menggunakan kode berikut di acara OnValidate di editor Properti:
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;
Harap dicatat bahwa Anda mungkin harus mengubah kode ini sedikit tergantung pada apakah Anda telah menyetel GridMode atau DataModeController.SyncMode ke true atau tidak, dan untuk menggunakan DisplayValue jika diperlukan, tetapi ide dasarnya harusnya berhasil.
EDIT: peristiwa OnValidate pada editor Properti terjadi sebelum mengonversi nilai tampilan menjadi nilai edit. Itulah alasan mengapa kode yang saya berikan ini harus diubah.
Agar kode berfungsi, Anda perlu menggunakan (untuk kolom yang sedang diubah) argumen DisplayValue yang disediakan oleh peristiwa, bukan nilai yang dikembalikan oleh GetValue.
Misalnya, jika EndDateCol adalah kolom yang memicu OnValidate, maka kodenya juga seharusnya demikian
ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
HTH
person
Guillem Vicens
schedule
02.07.2012