На этом шаге мы рассмотрим компонент TRxDBGrid.
Компонент TRxDBGrid (рис.1) предназначен, как и
стандартный компонент TDBGrid, для отображения данных таблиц
БД или результатов запросов в табличной форме. Являясь наследником
TDBGrid, компонент TRxDBGrid имеет все те же
свойства и методы, и, кроме того, некоторые свойства, находящиеся у
TDBGrid в секции protected,
вынесены в секцию public. Это такие свойства,
как Col, Row, LeftCol, Canvas.
Другие отличия от TDBGrid:
- BLOB-поля базы данных, такие как графические изображения,
текстовые мемо-поля, другие BLOB'ы могут отображаться в таблице
в виде пиктограмм при установленном в True значении свойства
ShowGlyphs; - вы можете изменить цвет шрифта и фона любой ячейки таблицы (либо любой ее
строки или столбца) в зависимости от значения поля или имени поля набора данных,
определив обработчик события OnGetCellParams; - имеются методы SaveLayout и RestoreLayout
для сохранения и восстановления порядка и ширин столбцов
компонента TRxDBGrid в INI-файле (или в
Registry для Delphi 2.0). Вы можете также автоматически сохранять
и восстанавливать эти параметры, присвоив значение свойству
IniStorage; - как в 32-битной, так и в 16-битной версии компонента поддерживает выбор
нескольких записей в таблице при значении свойства MultiSelect = True; - заголовки колонок Grid-а могут быть с помощью
свойства TitleButtons использованы как кнопки, например,
для изменения порядка сортировки отображаемых данных; - вы можете зафиксировать несколько первых колонок в
Grid-е с помощью свойства FixedCols.
Рис.1. Компонент TRxDBGrid
Рассмотрим некоторые свойства компонента:
Таблица 1. Свойства и методы компонента TRxDBGrid
Свойство | Описание |
---|---|
property ShowGlyphs: Boolean; | BLOB-поля базы данных, такие как графические изображения, текстовые мемо-поля, другие BLOB'ы могут отображаться в таблице в виде пиктограмм при установленном в True значении свойства ShowGlyphs. Если вы задали для поля обработчики событий OnGetText и OnSetText одновременно, то картинки для него отображаться не будут, несмотря на значение свойства ShowGlyphs. |
property OnGetCellParams: TGetCellParamsEvent; | Событие происходит при перерисовке ячейки компонента TRxDBGrid. В обработчике события вы можете проверить имя и значение поля БД, передаваемого в качестве параметра Field, а также значения любых других полей из текущей записи набора данных (dataset), к которым вы можете обратиться, например, так: N := (Sender as TrxDBGrid).DataSource.DataSet.FieldByName('CustNo').AsInteger; В результате вы можете изменить, в зависимости от значений в текущей записи либо от имен полей, характеристики шрифта, используемого для отрисовки ячейки (или строки либо столбца), использовав параметр AFont; либо цвет фона ячейки, используя параметр Background. Параметр Highlight определяет, является ли отрисовываемая ячейка выделенной ("подсвеченной"). |
procedure SaveLayout (IniFile: TIniFile); | Метод служит для сохранения в INI-файле установок компонентов TRxDBGrid (таких как порядок и ширины столбцов) и TSpeedbar (набор и расположение кнопок на панели инструментов), для последующего восстановления с помошью метода RestoreLayout. Данные о текущих установках компонента записываются в специфицированный INI-файл в секцию с именем, возвращаемым функцией GetDefaultSection. Если вы задали значение свойству IniStorage, то настройки могут сохраняться и восстанавливаться автоматически. |
procedure RestoreLayout (IniFile: TIniFile); | Метод служит для восстановления из INI-файла установок компонентов TRxDBGrid (таких как порядок и ширины столбцов) и TSpeedbar (набор и расположение кнопок на панели инструментов), если они были сохранены там с помошью метода SaveLayout. Текущие установки не изменяются, если специфицированный INI-файл не содержит данных об установках компонента. Если вы задали значение свойству IniStorage, то настройки могут сохраняться и восстанавливаться автоматически. |
property IniStorage: TFormPlacement; | Свойство позволяет автоматически сохранять специфические установки компонента в INI-файле или (для 32-разрядной версии) в системном регистре при помощи компонент TFormPlacement или TFormStorage. При задании значения свойству IniStorage (и непустом имени компонента), некоторые ее настройки, которые не являются published-свойствами и не могут быть заданы для TFormStorage напрямую, будут сохраняться и восстанавливаться одновременни с другими значениями, заданными для соответствующего компонента TFormPlacement (TFormStorage). Для TSpeedbar - это расположение кнопок на панели и положение самой панели, для TMRUManager - список строк, для TRxDBGrid - ширины и положение полей в таблице и т.д. Все компоненты, имеющие свойство IniStorage, имеют также методы для сохранения и восстановления их настроек вручную, такие как Save/RestoreLayout и т.д. |
property TitleButtons: Boolean; | Свойство определяет, могут ли заголовки колонок в Grid-е быть использованы как кнопки. По умолчанию - False. При установке свойства в значение True вы можете обработать события OnTitleBtnClick для обработки нажатия на такую кнопку и OnCheckButton, OnGetBtnParams для установки свойств кнопок в заголовке. |
Вы можете использовать компонент TRxDBGrid во всех случаях,
когда вам нужно отображать данные из БД в табличном виде,
вместо стандартной компоненты TDBGrid. Использование компонента
TRxDBGrid позволит вам изменять цвет и характеристики шрифта
для любой ячейки таблицы в зависимости от отображаемых данных.
Приведем пример: необходимо отобразить таблицу RxDBGrid1 с
определенными данными.
Поместим на форму компоненты RxDBGrid1,
Table2, DataSource2 – для связи базы данных и таблицы (рис.2).
Рис.2. Форма с размещенными на ней компонентами
RxDBGrid1, Table2, DataSource2
Выделим колонку с Ф.И.О. жирным шрифтом, колонку с кодом
красным цветом. И если человек родился раньше 1984 года нужно выделить его данные жирным курсивом.
Используем обработку события OnGetCellParams:
procedure TForm1.RxDBGrid1GetCellParams(Sender: TObject; Field: TField; AFont: TFont; var Background: TColor; Highlight: Boolean); var OldDate: TDateTime; DataSet: TDataSet; begin if Field.FieldName = 'Ф.И.О.' then AFont.Style := AFont.Style + [fsBold] else if Field.FieldName = 'Код' then Background := clRed else begin OldDate := EncodeDate(1984, 1, 1); DataSet := (Sender as TrxDBGrid).DataSource.DataSet; if DataSet.FieldByName('Дата рождения').AsDateTime < OldDate then AFont.Style := AFont.Style + [fsItalic]+ [fsBold]; end; end;
Работа программы показана на рис.3(а-б).
Рис.3а. Выделение поля 'Ф.И.О.' жирным шрифтом и поля 'Код' красным цветом
Рис.3б. Изменение даты рождения и выделение данных жирным курсивом
Текст этого примера можно взять здесь.
На следующем шаге мы рассмотрим компонент TRxDBLookupList.