ทำให้ง่ายขึ้น ฉันมี cxGrid ที่ฉันพิมพ์เวลาเริ่มต้นและเวลาสิ้นสุด สิ่งที่ฉันต้องการคือฟังก์ชันที่เมื่อฉันเปลี่ยนค่าใดค่าหนึ่งเหล่านี้จะคำนวณความแตกต่างและเก็บไว้ในคอลัมน์ที่สาม
ฉันมีปัญหาในการหาวิธีที่ถูกต้องในการทำเช่นนี้
ทำให้ง่ายขึ้น ฉันมี cxGrid ที่ฉันพิมพ์เวลาเริ่มต้นและเวลาสิ้นสุด สิ่งที่ฉันต้องการคือฟังก์ชันที่เมื่อฉันเปลี่ยนค่าใดค่าหนึ่งเหล่านี้จะคำนวณความแตกต่างและเก็บไว้ในคอลัมน์ที่สาม
ฉันมีปัญหาในการหาวิธีที่ถูกต้องในการทำเช่นนี้
ฉันเดาว่าคุณได้กำหนดตัวแก้ไขคุณสมบัติบางประเภท (อาจเป็น 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 เป็นจริงหรือไม่ และใช้ DisplayValue ในกรณีที่จำเป็น แต่แนวคิดพื้นฐานควรใช้งานได้
แก้ไข: เหตุการณ์ OnValidate ของตัวแก้ไขคุณสมบัติเกิดขึ้น ก่อน จะแปลงค่าที่แสดงเป็นค่าแก้ไข นั่นคือเหตุผลว่าทำไมจึงต้องปรับแต่งรหัสนี้ที่ฉันให้ไว้
เพื่อให้โค้ดทำงานได้ คุณต้องใช้ (สำหรับคอลัมน์ที่กำลังแก้ไข) อาร์กิวเมนต์ DisplayValue ที่ได้รับจากเหตุการณ์ แทนค่าที่ส่งกลับโดย GetValue
ตัวอย่างเช่น หาก EndDateCol จะเป็นคอลัมน์ที่ทริกเกอร์ OnValidate โค้ดก็ควรจะเป็น
ValueThirdCol := DisplayValue - myView.DataController.GetValue(RecordIndex, MyStartDateCol.Index);
ฮ