Библиотека компонент EhLib Руководство разработчика



страница3/13
Дата09.08.2019
Размер456 Kb.
#128179
ТипРуководство
1   2   3   4   5   6   7   8   9   ...   13

Установка файлов помощи.


Скопируйте файлы EhLib.hlp и EhLib.cnt из папки HLP архива EhLib в папку с файлами помощи Delphi 6.

Запустите Delphi IDE.

Выберите в меню Help|Customize для запуска приложения OpenHelp.

Добавьте файл EhLib.cnt на странице Contents, добавьте файл EhLib.hlp на страницы Index и Link.

Выберите в меню "File->Save Project".

Закройте приложение OpenHelp.

Для проверки правильности установки файлов помощи EhLib разместите на форме компонент DBGridEh и нажмите F1. Delphi IDE откроет окно помощи с информацией о компоненте TDBGridEh.

Если вы хотите установить файлы помощи в нескольких версиях Delphi одновременно (или под C++ Builder и Delphi одновременно), то создайте копии EhLib.hlp и EhLib.cnt для каждой версии Delphi и C++ Builder с разными именами файлов (например, для Delphi 6 скопируйте файлы EhLib.hlp и EhLib.cnt в EhLibD6.hlp и EhLibD6.cnt соответственно).

Далее нужно отредактировать файл EhLibD6.cnt. Этот файл содержит несколько разделов ":Include" в первых строках. Закомментируйте (используя символом ";") строки которые не содержат слово "DELPHI6.OHL".

:BASE EhLibD6.hlp

:TITLE EhLib library

;:Include bcb4.cfg

;:Include bcb5.ohl

;:Include delphi4.cfg

;:Include DELPHI5.OHL

:Include DELPHI6.OHL.

Скопируйте EhLibD6.hlp и EhLibD6.cnt в папку с [Delphi 6]\HELP и установите файлы помощи как описано выше.

Использование компоненты 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'а при помощи мыши.

TDBGridEh и вертикальный scrollbar.


При работе разными типами dataset'ов можно обратить внимание, что для одних типов dataset'ов DBGrid отображает вертикальный scrollbar правильно, а для других имеет только 3 позиции независимо от числа записей в dataset'е. Для согласования scrollbar'а DBGrid использует свойства RecordCount и RecNo компонента DataSet. Некоторые dataset'ы и даже некоторые dataset'ы при определенных условиях возвращают -1 в качестве значения  RecordCount и RecNo. Функция DataSet IsSequenced показывает, использует ли таблица базы данных номера записей для отображения порядка записей. Когда IsSequenced возвращает True приложения могут использовать свойство RecNo для перемещения по записям dataset'а и DBGrid использует свойство RecNo для отображения положения ползунка на вертикальном scrollbar'е. Но когда IsSequenced возвращает False, DBGrid не может определить позицию текущей записи и отображает ползунок scrollbar'а в 3-х позициях. Компонент DBGridEh имеет возможность показывать пропорциональный scrollbar даже для неупорядоченных dataset'ов. Для этого нужно активизировать свойство SumList. Установите SumList.Active в True и SumList.VirtualRecords в True. SumList создаст список bookmar'ов записей. Если вы используете технологию клиент-сервер для доступа к базе данных, SumList вынудит dataset вернуть все записи, и эта операция займет некоторое время. Обратите внимание, что VirtualRecords будут работать только с full relationship bookmarks, т.е. DataSet.ComapreBookmark должен возвращать > 0 если bookmark1 > bookmark2 (т.е. запись, на которую указывает bookmark1 идет после записи, на которую указывает bookmark2), = 0 если bookmark1 = bookmark2, < 0 если bookmark1< bookmark2. TBDEDataSet в большинстве случаев поддерживает full relationship bookmarks.

Использование DBGridEh для сортировки и фильтрации данных в DataSet.


DBGridEh не может сортировать или фильтровать данные самостоятельно. Но он может послать команду для сортировки или фильтрации специальному объекту, который сделает это в DataSet'е. Вы можете выбрать 2 типа сортировки (локальная и серверная) используя свойство SortLocal и два типа фильтрации (также локальная и серверная), но реальная возможность применения каждого типа операции зависит от типа DataSet'а. Например TBDEDataSet - не поддерживает локальную сортировку (внутри DataSet'а), так что вы не сможете сортировать данные локально, когда grid присоединен к TQuery или TTable. Библиотека имеет набор специальные объекты для сортировки/фильтрации стандартных типов DataSet'ов постовляемых вместе с Delphi.

Ниже вы можете видеть таблицу специальных объектов и DataSet'ов в которых объекты могут сортировать или фильтровать данные.




Unit

DataSet

Local sorting

Server sorting

Local filtering

Server filtering

EhLibBDE

TQuery,

TTable


N

Y

Y

Y

EhLibADO

TADOQuery,

TADODataSet



Y

Y

Y

Y

EhLibCDS

TClientDataSet

Y

Y

Y

Y

EhLibDBX

TSQLQuery,

TSQLDataSet



N

Y

N

Y

EhLibIBX

TIBQuery,

TIBDataSet



N

Y

Y

Y

  

Когда grid настроен для сортировки на Сервере, специальный объект строит SQL-выражение ORDER BY и заменяет строку ORDER BY в свойстве Command или SQL DataSet'а и переоткрывает его.

   Когда grid настроен для локальной сортировки специальный объект производит сортировку учитывая специфику конкретного типа DataSet'а.

  Когда grid настроен для Локальной фильтрации, специальный объект строит выражение и присваивает его свойству Filter DataSet'а. Перед этим нужно заранее выставить значение Filtered в True.

  Когда grid настроен для фильтрации на сервере, специальный объект строит выражение для предложения 'WHERE' SQL-строки DataSet'а. Он пытается найти строку, начинющуюся с ключевого выражения '/*Filter*/'  (Вы можете изменять это ключевое выражение используя глобальную переменную SQLFilterMarker) в SQL-выражении и добавляет выражение для фильтрации после ключа в той же строке. Так что, SQL-запрос должен содержать строку, начинающуюся с '/*Filter*/' . Например:

' select *

from table1

where


/*Filter*/ 1=1 '

  Для автоматической фильтрации/сортировки данных в dataset'е требуется добавить один из модулей EhLibXXX (EhLibADO, EhLibBDE, EhLibCDS ... в зависимости от dataset'а, подключенного к grid') в раздел 'uses' любого модуля вашего проекта. Эти EhLibXXX модули содержат код для регистрации класса который наследуется от TDatasetFeaturesEh (специальный объект) и осуществляет фильтрацию/сортировку в DataSet'е. Для DataSet'ов сторонних разработчиков можно написать и зарегестрировать свой собственный класс или написать обработчики событий OnApplyFilter и/или OnSortMarkingChanged для каждого требуемого grid'а. Кроме того можно написать OnApplyFilter и/или OnSortMarkingChanged для глобальной переменной DBGridEhDataService. Эти события имеют тип TNotifyEvent, где в качестве Sender'а выступает TCustomDBGridEh.




Поделитесь с Вашими друзьями:
1   2   3   4   5   6   7   8   9   ...   13




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница