cxGrid คำนวณในขณะที่คุณพิมพ์

ทำให้ง่ายขึ้น ฉันมี cxGrid ที่ฉันพิมพ์เวลาเริ่มต้นและเวลาสิ้นสุด สิ่งที่ฉันต้องการคือฟังก์ชันที่เมื่อฉันเปลี่ยนค่าใดค่าหนึ่งเหล่านี้จะคำนวณความแตกต่างและเก็บไว้ในคอลัมน์ที่สาม

ฉันมีปัญหาในการหาวิธีที่ถูกต้องในการทำเช่นนี้


person OZ8HP    schedule 01.07.2012    source แหล่งที่มา
comment
โปรดอธิบายอย่างละเอียด: DevExpress cxGrid? ฐานข้อมูลพื้นฐานหรือเพียงโครงสร้างในหน่วยความจำเช่น TSTringGrid?   -  person Jan Doggen    schedule 01.07.2012
comment
มีฐานข้อมูลอยู่ด้านหลัง แต่ฉันต้องการค่าที่เปลี่ยนแปลง 'บนหน้าจอ' ฉันได้ลองใช้วิธีการเปลี่ยนในตารางแล้ว แต่มันไม่แสดงบนหน้าจอก่อนที่จะรีเฟรชข้อมูล และนั่นมีผลกระทบที่ไม่พึงประสงค์บางอย่าง   -  person OZ8HP    schedule 01.07.2012


คำตอบ (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 เป็นจริงหรือไม่ และใช้ DisplayValue ในกรณีที่จำเป็น แต่แนวคิดพื้นฐานควรใช้งานได้

แก้ไข: เหตุการณ์ OnValidate ของตัวแก้ไขคุณสมบัติเกิดขึ้น ก่อน จะแปลงค่าที่แสดงเป็นค่าแก้ไข นั่นคือเหตุผลว่าทำไมจึงต้องปรับแต่งรหัสนี้ที่ฉันให้ไว้

เพื่อให้โค้ดทำงานได้ คุณต้องใช้ (สำหรับคอลัมน์ที่กำลังแก้ไข) อาร์กิวเมนต์ DisplayValue ที่ได้รับจากเหตุการณ์ แทนค่าที่ส่งกลับโดย GetValue

ตัวอย่างเช่น หาก EndDateCol จะเป็นคอลัมน์ที่ทริกเกอร์ OnValidate โค้ดก็ควรจะเป็น

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

person Guillem Vicens    schedule 02.07.2012
comment
ฉันพยายามทำให้สิ่งนี้ได้ผล แต่ก็ไม่มีโชค เหมือนกับที่ใช้ค่าก่อนหน้าจากคอลัมน์และค่าที่ฉันพิมพ์ไม่ได้ถูกเพิ่มลงในคอลัมน์ (ค่าเก่ายังคงอยู่ตรงนั้น) - person OZ8HP; 06.07.2012
comment
ขออภัยที่ตอบช้า. ฉันจะแก้ไขโพสต์ของฉันเพื่อชี้แจงบางอย่างเกี่ยวกับเหตุการณ์ OnValidate และ DisplayValue - person Guillem Vicens; 10.07.2012