Как определить, когда запись вставлена ​​в TDataSet? - PullRequest
1 голос
/ 11 января 2011

Я пишу элемент управления grid, который будет отображать содержимое TDataSet или TObjectList.Когда вам нужно только поддерживать TDataSet, все довольно просто:

  1. Ссылка на набор данных через потомка TDataLink.
  2. При рисовании содержимого сетки вы можете использовать записибуферизуется в этом TDataLink для рисования того, что вам нужно.
  3. Нет необходимости иметь отдельные объекты где-то для представления строк в TDataSet, потому что вы всегда просто рисуете строки в буфере.

В моем случае мне также нужно принимать данные из нескольких других источников, что означало, что мне нужно было иметь объект, представляющий каждую строку (также потому, что элемент управления требовал совсем немного состояния строки).

Но это вызывает проблемы с моделью, описанной выше.Поскольку у меня есть объект, представляющий каждую строку, мне нужно знать, когда записи добавляются или удаляются из TDataSet.И я просто не вижу, как это сделать.

Очевидно, я не хочу подключаться к событиям набора данных;возможно, они уже используются, и TDataLink предназначен для того, чтобы быть посредником между моим контролем и набором данных.И мои попытки использовать виртуальный метод DataEvent не увенчались успехом, потому что он просто не сообщает вам, была ли добавлена ​​/ удалена запись.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 11 января 2011

Если вы подключите своего потомка TDataLink к TDataSource, который подключен к TDataSet, вы получите вызов в процедуре RecordChanged при изменении данных.

Вы можете использовать события OnDataChange и OnUpdateData TDataSource, подключенного к TDataSet.

0 голосов
/ 11 января 2011

Кажется, вы должны получить свой собственный класс из базового класса набора данных, который вы собираетесь использовать.Там вам потребуется переопределить методы InternalAddRecord, InternalPost, InternalDelete и обрабатывать добавление / удаление записей.

...