Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > DB Aware компонент


Автор: elvis79 6.8.2009, 09:44
Пишу свой DB Aware компонент TMyDBGrid. Отображает только одно поле из датасета. Все вроде получилось. Делал по примеру "Разработка DB-Aware компонентов". Но заметил баг. Если набор данных изменяется вследствии скролинга мастер-таблици, то связаный с подчиненой таблицей мой компонент не перерисовывается (обновляется).

Как отловить событие, которое возникает при изменении набора данных вызваных при скролинге по MasterQuery?

Код

MasterQuery(TDBGrid) -->  DetailQuery(TMyDBGrid)


Если я скролирую по MasterQuery, то изменяется содержимое DetailQuery. Как мне отловить это изменение в своем контроле TMyDBGrid. Для TDataLink есть свойство RecordChanged, которое реагирует почти на все изменениия, но как в нем отфильтровать (или может есть какое-то другое) то, что изменился именно набор данных, а не скролинг по DetailQuery

Код

  TMyDataLink = class(TFieldDataLink)
  private
    FMyDBGrid:TMyDBGrid;
  protected
    procedure ActiveChanged; override;
    procedure RecordChanged(Field: TField); override;
    ...
  end;

  constructor TmmRGListDataLink.Create(AOwner: TMyDBGrid);
  begin
    inherited Create;
    FMyDBGrid := AOwner;
  end;

  procedure TmmRGListDataLink.ActiveChanged;
  begin
    inherited;
    FMyDBGrid.Repaint;
  end;

  procedure TmmRGListDataLink.RecordChanged(Field: TField);
  begin
    inherited;

    - если изменился набор данных то вызвать FMyDBGrid.Repaint для перерисовки контрола TMyDBGrid

    - Синхронизация пложения курсора в моем контроле  с положением курсора в датасете DetailLink

  end;


Собственно вопрос. Как отследить это изменение. Возможно надо использовать не TFieldDataLink, а какой-то другой

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)