Правильная ссылка на эту страницу
http://az-design.ru/Support/SoftWare/Delphi/D3/SB22.shtml

Глава 22. TDataLink и его производные

  • TDataLink
  • TTableDataLink
  • TFieldDataLink
  • TQueryDataLink
  • TNavDataLink
  • TDataSourceLink
  • TListSourceLink
  • TGridDataLink
  • TDBCtrlGridLink

       Класс TDataLink играет фундаментальную роль в обеспечении чувствительности к данным для соответствующих компонентов. Класс буквально образует путепровод между чувствительным к данным компонентом и TDataSet, который играет роль источника данных для такого компонента.
       Ни TDataLink, ни его производные в Палитре компонент Delphi недоступны. Они порождены от TPersistent, а не от TComponent. Прикладные программисты никогда не беспокоятся о TDataLink, но если вы являетесь разработчиком компонентов, то TDataLink играет весьма существенную роль. При реализации чувствительного к данным компонента наиболее типичен следующий сценарий: компонент будет иметь приватную или защищенную переменную, объявленную с типом TDataLink или одним из его производных. Такая переменная инициализируется в конструкторе чувствительного компонента, где создается соответствующий объект TDataLink и присваивается переменной. (Кроме того, полям обработчика событий TDataLink в конструкторе присваиваются соответствующие процедуры обработчиков событий. Естественно, нельзя забывать о разрушении всей конструкции в деструкторе чувствительных к данным компонентов.)
       Существуют два основных вида связей данных: один представляет всю запись (или множество записей) в базовом TDateSet, а другой — указанное поле в текущей записи базового TDataSet. Первый вид используется для реализации чувствительных компонентов, которые взаимодействуют с целыми записями (подобно TDBGrid), а второй вид — для реализации чувствительных к данным компонентов, представляющих одиночное поле (подобно TDBEdit).

TDataLink
       Класс TDataLink представляет собой базовый класс для всех связей данных. На рисунке 22-1 показаны генеалогия TDataLink и его потомков. В таблице 22-1 перечислены свойства и методы, которые реализованы TDataLink.


РИСУНОК 22-1 Генеалогия TDataLink и их потомки

Таблица 22-1 Методы, свойства и события, реализуемые TDataLink

Использовать или установить это ... Чтобы сделать это ... Наследование
Active Выясняет, активен ли TDataLink. Нет
ActiveRecord Устанавливает/получает активную запись TDataLink. Нет
BufferCount Устанавливает/получает количество буферов записей TDataLink. Нет
DataSet Получает TDataSet ассоциированного DataSource. Нет
DataSource Устанавливает/получает ассоциированный TDataSource для TDataLink. Нет
DataSourceFixed Проверяет правильность TDataSource для TDataLink. Нет
Edit Переводит в режим редактирования ассоциированный TDataSource. Нет
Editing Выясняет, находится ли ассоциированный TDataSource в режиме редактирования. Нет
ReadOnly Устанавливает/получает состояние "только для чтения" (Readonly) для TDataLink. Нет
RecordCount Узнает количество записей в ассоциированном наборе данных. Нет
UpdateRecord Обновляет текущую запись. Нет

Свойство Active
Свойство ActiveRecord
Свойство BufferCount
Свойство DataSet
Свойство DataSource
Свойство DataSourceFixed
Метод Edit
Свойство Editing
Свойство ReadOnly
Свойство RecordCount
Метод UpdateRecord

TTableDataLink
       TTableDataLink является прямым производным от TDataLink. Он отличается от TDataLink тем, что будет поддерживать приватную ссылку на ТТаblе. Единственная заметная разница заключается в том, что TTableDataLink имеет переопределенный конструктор, принимающий параметр ТТаblе.

TFieldDataLink
       TFieldDataLink предназначен для соединения своего ассоциированного источника данных с указанным полем в наборе данных. Фактически наиболее заметная особенность состоит в том, что TFieldDataLink добавляет к TDataLink свойство Field — ссылку на TField. Все другие дополнения предназначены для поддержки способности связываться с этим полем.
       Заметьте, что любой чувствительный к данным компонент, который представляет значение одного поля в наборе данных, должен будет поддерживать внутреннюю (обычно приватную) ссылку на TFieldDataLink. Аналогично TFieldDataLink способен ссылаться на свой ассоциированный чувствительный компонент через свойство Control. Таким образом чувствительный к данным компонент осведомлен о своем ассоциированном TFieldDataLink и наоборот. В таблице 22-2 перечислены все свойства, методы и события, которые реализует TFieldDataLink.

Таблица 22-2 Методы, свойства и события, реализуемые TFieldDataLink

Использовать или установить это ... Чтобы сделать это ... Наследование
CanModify Проверяет, можно ли модифицировать базовое поле. Нет
Control Ссылается на ассоциированный, чувствительный к данным компонент TReldDataUnk. Нет
Edit Редактирует данные в базовом поле набора данных. Нет
Editing Выясняет, редактируется ли ассоциированный источник данных. Нет
Field Получает доступ к ассоциированному объекту TField в TFieldDataLink. Нет
FieldName Устанавливает или получает имя поля ассоциированного объекта TField. Нет
Modified Помечает TFieldDataLink как модифицированный. Нет
OnActiveChange Реагирует на изменение свойства Active. Нет
OnDataChange Реагирует на изменениях в данных ассоциированного набора. Нет
OnEditingChange Реагирует на изменение состояний редактирования. Нет
OnUpdateData Реагирует на необходимость переноса данных в чувствительном к данным компоненте обратно в базовую запись. Нет
Reset Очищает данные в TFieldDataLink. Нет

Свойство CanModify
Свойство Control
Метод Edit2
Свойство Editing
Свойство Field
Свойство FieldName
Метод Modified
Событие OnActiveChange
Событие OnDataChange
Событие OnEditingChange
Событие OnUpdateData
Метод Reset

TQueryDataLink
       TQueryDataLink является прямой производной TDataLink. Единственная заметная разница (по сравнению с TDataLink) заключается в том, что TQueryDataLink поддерживает приватную ссылку на TQuery. Таким образом, TQueryDataLink переопределяет конструктор, принимающий параметр TQuery.

TNavDataLink
       TNavDataLink является прямой производной TDataLink. Единственная заметная разница (по сравнению с TDataLink) заключается в том, что TNavDataLink поддерживает приватную ссылку на TDBNavigator. Таким образом, TNavDataLink переопределяет конструктор, который принимает параметр TDBNavigator.

TDataSourceLink
       TDataSourceLink является прямой производной TDataLink. Он отличается от TDataLink тем, что поддерживает приватную ссылку на TDBLookupControl и перекрывает (защищенные) методы ActiveChanged и RecordChanged. TDataSourceLink используется компонентами TDBLookupControl. Внутренняя ссылка на ассоциированный компонент TDBLookupControl устанавливается в конструкторе самого компонента TDBLookupControl.

TListSourceLink
       TListSourceLink является прямой производной TDataLink. Он отличается от TDataLink тем, что поддерживает приватную ссылку на TDBLookupControl и перекрывает (защищенные) методы ActiveChanged и RecordChanged. TListSourceLink используется компонентами TDBLookupControl. Внутренняя ссылка на ассоциированный компонент TDBLookupControl устанавливается в конструкторе самого компонента TDBLookupControl.

TGridDataLink
       TGridDataLink используется внутренне для поддержки чувствительной к данным сетки. TGridDataLink задействуется TDBGrid. Выражаясь более точно, TGridDataLink используется TCustomDBGrid, являющимся прямым предком TDBGrid. Порождая класс от TCustomDBGrid, можно определить собственный вид чувствительной к данным сетки и воспользоваться преимуществами способности связывания данных ассоциированного TGridDataLink.
       TCustomDBGrid поддерживает приватную ссылку (FDataLink) на TGridDataLink. Соответствующий TGridDataLink поддерживает приватную ссылку (FGrid) на TCustomDBGrid. Эти перекрестные ссылки устанавливаются в конструкторе TCustomDBGrid, который создает TGridDataLink и присваивает его приватной ссылке. При создании TGridDataLink конструктор последнего ожидает получения свой единственного параметра в качестве ссылки на TCustomDBGrid: TCustomDBGrid, который создает TGridDataLink. (Это означает, что конструктор TCustomDBGrid вызывает конструктор TGridDataLink и передает в качестве параметра Self.)
       TGridDataLink управляет внутренним приватным массивом (FFieldMap), который следит за тем, как в ассоциированном TDataSet поля отображаются на колонки TCustomDBGrid. Таблица 22-3 показывает свойства и методы, которые реализуются TGridDataLink.

Таблица 22-3 Методы и свойства, реализуемые TGridDataLink

Использовать или установить это ... Чтобы сделать это ... Наследование
AddMapping Отобразить поле в наборе данных на колонку в сетке. Нет
ClearMapping Очистить отображение между полями набора данных и колонками сетки. Нет
DefaultFields Определить, доступны ли в наборе данных все поля по умолчанию. Нет
FieldCount Сообщить о числе полей в базовом отображении. Нет
Fields Показать массив TFields базового отображения. Нет
Modified Отметить данные TGridDataLink как модифицированные. Нет
Reset Очистить данные в TGridDataLink. Нет
SparseMap Сообщить, организованы ли колонки сетки в пользовательский макет или в макет по умолчанию. Нет

Метод AddMapping
Метод ClearMapping
Свойство DefaultFields
Свойство FieldCount
Свойство Fields
Метод Modified
Метод Reset
Свойство SparseMap

TDBCtrlGridUnk
       TDBCtrlGridLink является прямым производным от TDataLink. Он отличается от TDataLink тем, что поддерживает приватную ссылку на TDBCtrlGrid и перекрывает защищенные методы ActiveChanged и DataSetChanged. TDBCtrlGridLink используется компонентами TDBGridPanel. Внутренняя ссылка на ассоциированный компонент TDBCtrlPanel устанавливается в самом конструкторе компонента TDBCtrlPanel. Заметьте, что TDBCtrlPanel является фундаментальным строительным блоком, на котором сконструирован TDBCtrlGrid.


<<< Пред. Оглавление
Начало раздела
След. >>>




Дата последнего изменения:
Thursday, 21-Aug-2014 09:10:56 MSK


Постоянный адрес статьи:
http://az-design.ru/Support/SoftWare/Delphi/D3/SB22.shtml