간체 나는 시작 시간과 종료 시간을 입력하는 cxGrid가 있습니다. 내가 필요한 것은이 값 중 하나를 변경하면 차이가 계산되어 세 번째 열에 저장되는 기능입니다.cxGrid는 사용자가 입력 할 때 계산합니다.
올바른 방법을 찾는 데 문제가 있습니다.
간체 나는 시작 시간과 종료 시간을 입력하는 cxGrid가 있습니다. 내가 필요한 것은이 값 중 하나를 변경하면 차이가 계산되어 세 번째 열에 저장되는 기능입니다.cxGrid는 사용자가 입력 할 때 계산합니다.
올바른 방법을 찾는 데 문제가 있습니다.
일종의 속성 편집기 (아마도 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
나는 이것을 작동 시키려고 노력했지만 행운은 없다. 그것은 열의 이전 값을 사용하고있는 것과 i 유형의 값이 열에 추가되지 않고 있습니다 (이전 값이 그대로 유지됩니다). – OZ8HP
늦게 답변 해 죄송합니다. OnValidate 이벤트 및 DisplayValue에 대해 설명하기 위해 게시물을 편집합니다. –
해야 하는가? 기본 데이터베이스 또는 TSTringGrid와 같은 메모리 내 구조? –
거기에 데이터베이스가 있지만 값이 필요합니다 '화면에서'변경했습니다. 테이블에서 변경하는 방법을 시도했지만 데이터를 새로 고치기 전에 화면에 표시되지 않고 원치 않는 효과가 있습니다. . – OZ8HP