2013-07-08 2 views
0

У меня есть две сетки (TcxGrid) в моем приложении, каждая из которых находится в стороне от формы. Обе сетки показывают связанные данные, хотя их можно прокручивать вертикально отдельно. Я хочу рисовать стрелки в средней панели, показывающей линию другой сетки, что запись связана с, как в этом примере:Как нарисовать стрелки, чтобы показать связанные данные между записями в двух TcxGrid?

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

Жеребьевка proccess прост. Моя проблема заключается в определении позиций записи. Как узнать, какова вертикальная позиция каждой строки/записи сетки, учитывая, что она может группироваться в обе сетки?

Заранее спасибо.

+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; 

 Смежные вопросы

  • Нет связанных вопросов^_^