Как я могу определить, когда запись вставлена ​​в TDataset?

StackOverflow https://stackoverflow.com/questions/4655387

  •  09-10-2019
  •  | 
  •  

Вопрос

Я пишу контроль сетки, который отобразит содержимое TDataset или TobjectList. Когда вам нужно только поддержать TDataset, все довольно просты:

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

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

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

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

Любые идеи?

Это было полезно?

Решение

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

Вы можете использовать события ondatachange и oneUnpdatedata of tdataSource, подключенные к tdataSet.

Другие советы

Похоже, вы должны получить свой собственный класс из класса базового набора данных, который вы собираетесь использовать. Там вам понадобится переопределить InternalAddrecord, InternalPost, InternalDelete Methods и Dising Records Applyse / Удаление.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top