Использование компоненты TDBGridEh

Общие понятия о TDBGridEh, TDataLink и TDataSet.

Следующий раздел распространяется как на компонент TDBGridEh так и на TDBGrid.

Компонент TDBGridEh позволяет отображать и редактировать записи наборов данных в виде таблицы.

TDBGridEh не хранит данные в себе, он только отображает данные набора данных TDataSet через объект TDataLink. Каждый компонент для связи с данными TDataSet'а имеет внутренний объект TDataLink. Вы можете подключить TDBGridEh к dataset'у используя свойство DataSource. Если вы уже использовали компонент TStringGrid, то могли заметить что данные, отображаемые в TStringGrid и в TDBGridEh очень похожи, но механизмы, которые используются для отображения данных в TStringGrid и в TDBGridEh абсолютно разные. В TStringGrid общее количество строк сетки равно количеству в массиве строк данных, тогда как в TDBGridEh (и TDBGrid) число строк всегда не больше чем числа видимых строк. И хотя вертикальный scrollbar может отображать позицию относительно общего числа записей в dataset'е, он берет данные о позиции не из массива ячеек grid'а, а непосредственно из dataset'а (DataSet.RecNo). TDataSet не позволяет нам работать с данными как с массивом данных, напр. мы не можем быстро получить значение поля некой записи. Кроме того, некоторые типы dataset'ов не имеют понятия номера записи (DataSet.RecNo). В таких dataset'ах мы можем только знать, когда мы находимся в начале либо конце dataset'а либо где-то между ними и в этом случае DBGrid показывает вертикальный scrollbar только в 3 позициях (В TDBGridEh для работы с такими датасетами надо активизировать объект SumList). Для получения возможности отображения нескольких записей одновременно, объект TDataLink использует буфер записей (record buffer window) с быстрым доступом только для чтения. DBGrid использует эту возможность datalink'а и устанавливает размер record buffer window равный количеству возможных видимых строк grid'а. DataLink не позволяет определять с какой записи в DataSet'е, заполняется этот буфере. DataLink сам прокручивает содержимое record buffer window когда мы перемещаемся по dataset'у (Next, Prior) таким образом, чтобы активная запись всегда оставалась внутри record buffer window. В этом причина, почему активная запись меняет позицию, когда пользователи изменяют позицию scrollbar'а при помощи мыши.