2013-07-08 6 views
0

내 응용 프로그램에는 두 개의 격자 (TcxGrid)가 있습니다. 각 격자는 폼의 한면에 있습니다. 두 격자는 수직으로 분리하여 스크롤 할 수는 있지만 링크 된 데이터를 표시합니다. 는 I 레코드가이 예와 같이, 연결되어있는 다른 그리드 라인을 나타내는 중간 패널 화살표 그리려 :두 TcxGrid의 레코드간에 연결된 데이터를 표시하는 화살표를 그리는 방법?

GridA GridB 
+---+ +---+ 
| a |---| a | 
| b | | i | 
| c |\ | h | 
| d | \ | g | 
| e | \| h | 
| f | | b | 
+---+ +---+ 

연신 였는지를 간단하다. 내 문제는 기록 순위를 확인하는 것입니다. 두 그리드 행/레코드의 세로 위치가 무엇인지 알아 내면 두 그리드 모두에 그룹화가 가능하다고 생각합니까?

미리 감사드립니다.

+0

당신이 그것을 구현하는 방법의 TcxCustomGridRecord.Index가 도움이 될 수 있습니다 따라? – Jason

+0

아니요, 불행하게도. GridA.DataController.RecordCount의 루프를 사용하여 모든 레코드를 스캔하고 GetRowIndexByRecordIndex 메서드를 사용하여 레코드와 다른 레코드를 얻습니다. 따라서 ViewInfo.RecordsViewInfo [iRow] .ContentBounds를 호출 할 수 있습니다. 수직 스크롤 (몇 개 레코드)이 없어도 정상적으로 작동합니다. 그러나 스크롤을 시작하면 마지막 레코드를 찾지 못합니다. –

답변

0

내가 그리드의 기록의 수직 위치가이 방법으로 얻을 수 있다는 것을 발견했습니다

그리드보기는 재산 ViewData.Rows 있습니다. Rows은 배열이고 각 요소는 RecordIndex 속성을가집니다. 따라서 Rows 배열을 반복하고 그 중 RecordIndex이 찾고있는 것이 맞는지 테스트하고, 참이면 속성 ViewInfo.ClientBounds.Top을 테스트 할 수 있습니다.

예 :

for i := 0 to gdMovimentoTV.ViewData.RowCount - 1 do 
    if gdMovimentoTV.ViewData.Rows[i].RecordIndex = iSomeRecordIndex then begin 
    if Assigned(gdMovimentoTV.ViewData.Rows[i].ViewInfo) then begin 
     Result := gdMovimentoTV.ViewData.Rows[i].ViewInfo.ClientBounds.Top; 
     Break; 
    end;