2012-07-01 6 views
0

간체 나는 시작 시간과 종료 시간을 입력하는 cxGrid가 있습니다. 내가 필요한 것은이 값 중 하나를 변경하면 차이가 계산되어 세 번째 열에 저장되는 기능입니다.cxGrid는 사용자가 입력 할 때 계산합니다.

올바른 방법을 찾는 데 문제가 있습니다.

+1

해야 하는가? 기본 데이터베이스 또는 TSTringGrid와 같은 메모리 내 구조? –

+0

거기에 데이터베이스가 있지만 값이 필요합니다 '화면에서'변경했습니다. 테이블에서 변경하는 방법을 시도했지만 데이터를 새로 고치기 전에 화면에 표시되지 않고 원치 않는 효과가 있습니다. . – OZ8HP

답변

1

일종의 속성 편집기 (아마도 DateEdit)를 열에 할당했다고 생각합니다.

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 또는에 따라이 코드를 조정할해야 할 수도 있습니다 :

는 속성 편집기의 OnValidate 이벤트에 다음 코드를 사용하려고 할 수 있음을 감안할 때 DataModeController.SyncMode를 true로 설정하거나 필요하지 않은 경우 DisplayValue를 사용하지만 기본 아이디어가 작동해야합니다.

편집 : 속성 편집기의 OnValidate 이벤트는 편집 값으로 표시 값을 변환 전에 발생합니다. 이것이 내가 제공 한이 코드를 왜곡해야만하는 이유입니다.

코드가 작동하려면 GetValue에서 반환 한 값 대신 이벤트에서 제공 한 DisplayValue 인수를 사용해야합니다 (수정중인 열에 대해). DevExpress의 cxGrid 다음 EndDateCol이 OnValidate 트리거 열을 될 경우

예를 들어, 다음 코드는 정교한하시기 바랍니다

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

HTH

+0

나는 이것을 작동 시키려고 노력했지만 행운은 없다. 그것은 열의 이전 값을 사용하고있는 것과 i 유형의 값이 열에 추가되지 않고 있습니다 (이전 값이 그대로 유지됩니다). – OZ8HP

+0

늦게 답변 해 죄송합니다. OnValidate 이벤트 및 DisplayValue에 대해 설명하기 위해 게시물을 편집합니다. –

관련 문제