Как определить, когда запись вставлена в TDataSet?
Я пишу элемент управления сеткой, который будет отображать содержимое TDataSet или TObjectList. Когда вам нужно только поддержать TDataSet, все довольно просто:
- Ссылка на набор данных через потомка TDataLink.
- При рисовании содержимого сетки вы можете использовать записи, помещенные в буфер TDataLink, чтобы нарисовать то, что вам нужно.
- Нет необходимости иметь отдельные объекты где-либо для представления строк в TDataSet, потому что вы всегда просто рисуете строки в буфере.
В моем случае мне также нужно принимать данные из нескольких других источников, что означало, что мне нужно было иметь объект, представляющий каждую строку (также потому, что элемент управления требовал совсем немного состояния строки).
Но это вызывает проблемы с моделью, описанной выше. Поскольку у меня есть объект, представляющий каждую строку, мне нужно знать, когда записи добавляются или удаляются из TDataSet. И я просто не вижу, как это сделать.
Ясно, что я не хочу подключаться к событиям набора данных; возможно, они уже используются, и TDataLink предназначен для того, чтобы быть посредником между моим контролем и набором данных. И мои попытки использовать виртуальный метод DataEvent не увенчались успехом, потому что он просто не говорит вам, была ли запись добавлена / удалена.
Есть идеи?
2 ответа
Если вы подключите своего потомка TDataLink к TDataSource, который подключен к TDataSet, вы получите вызов в процедуре RecordChanged при изменении данных.
Вы можете использовать события OnDataChange и OnUpdateData TDataSource, подключенного к TDataSet.
Кажется, вы должны получить свой собственный класс из базового класса набора данных, который вы собираетесь использовать. Там вам нужно будет переопределить методы InternalAddRecord, InternalPost, InternalDelete и обрабатывать добавление / удаление записей.