cxGrid menghitung saat Anda mengetik

Sederhananya Saya memiliki cxGrid tempat saya mengetik waktu mulai dan waktu berakhir. Yang saya perlukan adalah fungsi yang ketika saya mengubah salah satu nilai ini menghitung perbedaannya dan menyimpannya di kolom ketiga

Saya kesulitan menemukan cara yang benar untuk melakukan ini.


person OZ8HP    schedule 01.07.2012    source sumber
comment
Harap jelaskan: DevExpress cxGrid? Basis data yang mendasarinya, atau hanya struktur dalam memori seperti TSTringGrid?   -  person Jan Doggen    schedule 01.07.2012
comment
Ada database di belakangnya, tapi saya perlu nilainya diubah 'di layar'. Saya telah mencoba metode mengubahnya di tabel, tetapi tidak ditampilkan di layar sebelum menyegarkan data dan itu memiliki beberapa efek yang tidak diinginkan.   -  person OZ8HP    schedule 01.07.2012


Jawaban (1)


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
comment
Saya telah mencoba membuat ini berhasil, tetapi tidak berhasil. Itu karena menggunakan nilai sebelumnya dari kolom dan nilai yang saya ketik tidak ditambahkan ke kolom (nilai lama tetap di sana) - person OZ8HP; 06.07.2012
comment
Maaf atas jawaban yang terlambat. Saya akan mengedit posting saya untuk memperjelas sesuatu tentang acara OnValidate dan DisplayValue. - person Guillem Vicens; 10.07.2012