Компоненты отображения данных


До этого момента мы рассмотрели аспекты создания приложений баз данных, касающиеся организации доступа к данным и создания в приложениях наборов данных. Теперь более подробно остановимся на вопросах отображения данных в приложениях (интерфейс приложений).
Отображение данных обеспечивает достаточно представительный набор компонентов VCL Delphi. Многие из них унаследованы от компонентов, инкапсулирующих стандартные элементы управления. Для связи с набором данных эти компоненты используют компонент TDataSource.
Механизмы управления данными реализованы в компонентах наборов данных и активно взаимодействуют с компонентами отображения данных.
В этой главе рассматриваются следующие вопросы:

  •  использование стандартных компонентов отображения данных;
  •  навигация по данным;
  •  механизм синхронного просмотра данных;
  •  использование графиков для представления данных.
  • Классификация компонентов отображения данных
  • Все компоненты отображения данных можно разделить на группы по нескольким критериям (1).
  • Большинство компонентов предназначены для работы с отдельным полем, т. е. при перемещении по записям набора данных такие компоненты показывают текущие значения только одного поля. Для соединения с набором данных через компонент TDataSource предназначено свойство DataSource. Поле задается свойством DataField.
  • Компоненты TDBGrid и TDBCtrlGrid обеспечивают просмотр наборов данных целиком или в произвольном сочетании полей. В них присутствует только свойство DataSource.
  • Особенную роль среди компонентов отображения данных играет компонент TDBNavigator. Он не показывает данные и не предназначен для их редактирования, зато обеспечивает навигацию по набору данных.
  • Наиболее часто в практике программирования используются компоненты TDBGrid, TDBEdit И TDBNavigator.
  • Для представления и редактирования информации, содержащейся в полях типа Memo, используются специальные компоненты TDBMemo и TDBRichEdit.
  • Для просмотра (без редактирования) изображений предназначен компонент TDBImage.
  • Отдельную группу составляют компоненты синхронного просмотра данных. Они обеспечивают показ значений поля из одной таблицы в соответствии со значениями поля из другой таблицы.
  • Наконец, данные можно представить в виде графика. Для этого предназначен компонент TDBChart.
  • Как видите, набор компонентов отображения данных весьма разнообразен и позволяет решать задачи по созданию любых интерфейсов для приложений баз данных.
  • Ввиду общности решаемых задач, компоненты отображения данных имеют несколько важных общих свойств, которые представлены в табл. 15.1 и в дальнейшем изложении опущены.
  • Таблица 15.1. Общие свойства компонентов отображения данных

Табличное представление данных
 
Компонент TDBGrid


Этот компонент инкапсулирует двумерную таблицу, в которой строки представляют собой записи, а столбцы — поля набора данных.
Компонент TDBGrid является потомком классов TDBCustomGrid И TCustomGrid.
От класса TCustomGrid наследуются все функции отображения и управления работой двумерной структуры данных. Класс TDBCustomGrid обеспечивает визуализацию и редактирование полей из набора данных, причем TDBGrid только публикует свойства и методы класса TDBCustomGrid, не добавляя собственных.
В компоненте TDBGrid можно отображать произвольное подмножество полей используемого набора данных, но число записей ограничить нельзя — в компоненте всегда присутствуют все записи связанного набора данных. Требуемый набор полей можно составить при помощи специального Редактора столбцов, который открывается при двойном щелчке на компоненте, перенесенном на форму, или кнопкой свойства columns в Инспекторе объектов.
Новая колонка добавляется при помощи кнопки Add New, после этого ее название появляется в списке колонок (2). Для выбранной в списке колонки доступные для редактирования свойства появляются в Инспекторе объектов. Колонки в списке можно редактировать, удалять, менять местами.
При помощи кнопки Add All Fields в сетку можно добавить все поля набора данных.
Каждая колонка компонента TDBGrid описывается специальным классом TColumn, а совокупность колонок доступна через свойство columns компонента, оно имеет тип TDBGridColumns и представляет собой индексированный список объектов колонок. Поле набора данных связывается с конкретной колонкой при помощи свойства FieldName класса TColumn. При этом в колонку автоматически переносятся все необходимые параметры поля, в частности заголовок поля, настройки шрифтов, ширина поля. После ручного изменения параметров первоначальные значения восстанавливаются методами соответствующих объектов Icolumn.
 При метода метода DefaultDrawColumnCell  и метода- обработчика OnDraw-CoiumnCell можно управлять процессом отображения данных в ячейках.
Метод DefauitorawDataCelll предназначен только для обеспечения обратной совместимости по коду с более ранними версиями.
Настройка параметров компонента TDBGrid, от которых зависит его внешний вид и некоторые функции, осуществляется при помощи свойства options (табл. 15.2). Текущая позиция в двумерной структуре данных может быть определена свойствами SelectedField, SelectedRows, Selectedlndex.
При необходимости разработчик может использовать разнообразные методы-обработчики событий. Среди них есть как стандартные методы, присущие всем элементам управления, так и специфические.
Например, при помощи метода-обработчика OnEditButtonClick можно предусмотреть вызов специализированной формы при щелчке на кнопке в ячейке:
procedure TForml.DBGridlEditButtonClick(Sender: TObject); 
begin
if DBGridl.Selectedlndex = 2 then SomeForm.ShowModal; 
end;
 Примечание
Объект колонки TColumn имеет свойство ButtonStyle. Если ему присвоить значение cbsEllipsis, то при активизации ячейки этой колонки в правой части ячейки появляется кнопка.
Таблица 15.2. Свойства и методы компонента WBGrid

В работе компонента TDBGrid важную роль играет класс TColumn, который инкапсулирует свойства колонки или столбца сетки (табл. 15.3). Его основным назначением является правильное отображение данных из поля набора данных, связанного с этой колонкой. Поэтому объект колонки обладает свойствами и методами, которые позволяют произвольным образом задавать параметры отображения данных (цвет, шрифт, ширину и т. д.). Первоначальные значения берутся из связанных с колонками полей. Измененные свойства можно восстановить при помощи группы специальных методов (DefauitColor, DefaultFont И др.).
Свойство Assignedvalues позволяет в любой момент определить, какие первоначальные настройки были изменены.
За отображение заголовка колонки отвечает свойство Title, представляющее собой ссылку на экземпляр объекта TColumnTitie. Здесь можно задать текст заголовка, параметры шрифта текста заголовка и цвет фона заголовка. По умолчанию текст заголовка берется из свойства DispiayLabel объекта TField (CM. гл. 13).
Каждой колонке можно придать список, который разворачивается при щелчке на кнопке в активной ячейке колонки. Выбранное в списке значение автоматически заносится в ячейку. Для реализации этой возможности применяется свойство pickList типа TStrings. Достаточно лишь заполнить список значениями во время разработки или выполнения (3).
Таблица 15.3. Свойства и методы класса TColumn

При работе с компонентом TDBGrid все операции с отдельными колонками осуществляются при помощи экземпляра класса TDBGridColumns, который инкапсулирует список объектов колонок (свойство Columns компонента TDBGrid). Доступ к колонкам осуществляется при помощи свойства items. Нумерация колонок начинается с нуля.
При помощи свойств и методов класса TDBGridColumns можно изменять настройки полей компонента TDBGrid во время выполнения (табл. 15.4).
Свойство state определяет способ создания колонок. Его значение устанавливается автоматически. При создании колонок для всех полей сразу (кнопка Add All Fields Редактора столбцов) устанавливается значение csDefault.
При любом ручном изменении свойств устанавливается значение csCustomized. При программном изменении значения свойства во время выполнения все существующие колонки удаляются.
Все данные из существующих колонок можно сохранить в файле или потоке при помощи методов SaveToFile и saveToStream, а затем загрузить их обратно методами LoadFromFile И LoadFromStream.
Таблица 15.4. Свойства и методы класса TDBGridColumns

 
Компонент TDBCtrlGrid
Компонент TDBCtrlGrid внешне напоминает компонент TDBGrid, но никак не связан с классом TCustomDBGrid, а наследуется напрямую от класса TWinControl.
Этот компонент позволяет отображать данные в строках в произвольной форме. Компонент представляет собой набор панелей, каждая из которых служит платформой для размещения данных отдельной записи набора данных. На панели могут размещаться любые компоненты отображения данных, предназначенные для работы с отдельным полем. С каждым таким компонентом можно связать нужное поле набора данных. При открытии набора данных в компоненте TDBCtrlGrid на каждой новой панели создается набор компонентов отображения данных, аналогичный тому, который был создан на одной панели во время разработки.
На панель можно переносить только те компоненты отображения данных, которые показывают значение одного поля для единственной записи набора данных. Нельзя использовать компоненты TDBGrid, TDBCtrlGrid, TDBRichEdit, TDBListBox, TDBRadioGroup, TDBLookupListBox.
После того, как для компонента TDBCtrlGrid задано значение свойства DataSource, все переносимые на панель компоненты отображения данных автоматически связываются с указанным компонентом TdataSource (табл. 15.5). Самостоятельное задание свойства DataSource для дочерних компонентов отображения данных не допускается. В них требуется определить только поля.
Компонент может отображать панели в одну или несколько колонок. Для задания числа колонок панелей используется свойство colcount. Число видимых строк панелей определяется свойством RowCount. Вертикальное или горизонтальное размещение колонок панелей зависит от значения свойства Orientation.
При использовании нескольких колонок панелей курсор перемещается по колонке сверху вниз с последующим переходом на следующую колонку. Направление движения курсора не зависит от значения свойства Orientation.
Размеры одной панели определяются свойствами panelHeight и Panelwidth. Они взаимосвязаны с размерами самого компонента. При изменении значений свойств PanelHeight и Panelwidth размеры компонента изменяются таким образом, чтобы в нем помещалось указанное в свойствах colcount и RowCount число панелей и наоборот.
Не рекомендуется размещать на панели компоненты TDBMemo и TDBimage, т. к. это может привести к значительному снижению производительности.
Таблица 15.5. Свойства и методы компонента TDBCtrlGrid

Навигация по набору данных


Перемещение или навигация по записям набора данных может осуществляться несколькими путями. Например, в компонентах TDBGrid и TDBCtrlGrid, которые отображают сразу несколько записей набора данных, можно использовать клавиши вертикального перемещения курсора или вертикальную полосу прокрутки.
Но что делать, если на форме находятся только компоненты, отображающие одно поле только текущей записи набора данных (TDBEdit, TDBCombоВох и т. д.)? Очевидно, что в этом случае на форме должны быть расположены дополнительные элементы управления, отвечающие за перемещение по записям.
Аналогично, ни один компонент отображения данных не имеет встроенных средств для создания и удаления записей целиком.
Для решения указанных задач и предназначен компонент TDBNavigator, который представляет собой совокупность управляющих кнопок, выполняет операции навигации по набору данных и модификации записей целиком.
Компонент TDBNavigator при помощи свойства DataSource связывается с компонентом TDataSource и через него с набором данных. Такая схема позволяет обеспечить изменение текущих значений полей сразу во всех связанных с TDataSource компонентах отображения данных. Таким образом, TDBNavigator только дает команду на выполнение перемещения по набору данных или другой управляющей операции, а всю реальную работу выполняют компонент набора данных и компонент TDataSource. Компонентам отображения данных остается только принять новые данные от своих полей.
Компонент TDBNavigator содержит набор кнопок, каждая из которых отвечает за выполнение одной операции над набором данных. Всего имеется 10 кнопок, разработчик может оставить в наборе любое количество кнопок в любом сочетании. Видимостью кнопок управляет свойство visibleButtons:
type
TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast, nblnsert, nbDelete, 
nbEdit, nbPost, nbCancel, nbRefresh);
TButtonSet = set of TNavigateBtn; 
property VisibieButtons: TButtonSet;
Каждый элемент типа TNavigateBtn представляет одну кнопку, их назначение описывается ниже:
nbFirst — перемещение на первую запись набора данных; 
nbPrior — перемещение на предыдущую запись набора данных;
nbNext — перемещение на следующую запись набора данных;
nbLast — перемещение на последнюю запись набора данных; 
nblnsert — вставка новой записи в текущей позиции набора данных;
nbDelete — удаление текущей записи, курсор перемешается на следующую запись;
nbEdit — набор данных переводится в режим редактирования;
nbPost — в базу данных переносятся все изменения в текущей записи;
nbcancel — все изменения в текущей записи отменяются;
nbRefresh — восстанавливаются первоначальные значения текущей записи, сделанные после последнего переноса изменений в базу данных.
Самой критичной к возможной потере данных вследствие ошибки является операция удаления записи, поэтому при помощи свойства confirmDelete можно включить механизм контроля удаления. При каждом удалении записи нужно будет дать подтверждение выполняемой операции.
Нажатие любой кнопки можно эмулировать программно при помощи метода BtnClick.
В случае необходимости выполнения дополнительных действий при щелчке на любой кнопке можно воспользоваться обработчиками событий BeforeAction и Onciick, в которых параметр Button определяет нажатую кнопку. Свойства и методы компонента TDBNavigator представлены в табл. 15.6.
Таблица 15.6. Свойства и методы компонента TDBNavigator

Представление отдельных полей


Большинство компонентов отображения данных предназначено для представления данных из отдельных полей. Для этого все они имеют свойство DataField, которое указывает на требуемое поле набора данных.
В зависимости от типа данных поля могут использовать различные компоненты. Для большинства стандартных полей используются компоненты TDBText, TDBEdit, TDBComboBox, TDBListBox.
Данные в формате Memo отображаются компонентами TDBMemo и TDBRichEdit. Для показа изображений предназначен компонент TDBImage.
 
Компонент TDBText
Этот компонент представляет собой статический текст, который отображает текущее значение некоторого поля связанного набора данных. При этом данные можно просматривать в режиме "только для чтения".
Непосредственным предком компонента является класс TCustomLabel, поэтому он очень похож на компонент TLabel.
При использовании компонента следует обратить внимание на возможную длину отображаемых данных. Для предотвращения обрезания текста можно использовать свойства AutoSize И Wordwrap.
Компонент TDBEdit
Компонент представляет собой стандартный однострочный текстовый редактор, в котором отображаются и изменяются данные из поля связанного набора данных.
Прямой предок компонента — класс TCustomMaskEdit, который также является прямым предком компонента TEdit.
Компонент может осуществлять проверку редактируемых данных по заданной для поля маске. Непосредственно для редактора задать маску нельзя, т. к. содержащее маску свойство EditMask в классе TCustomMaskEdit является защищенным, а в TDBEdit не перекрыто. Тем не менее механизм контроля полностью унаследован. Саму же маску можно задать в связанном с редактором поле. Объект TField имеет собственное свойство EditMask, которое и используется при проверке данных в редакторе (см. гл. 13).
Проверка редактируемого текста на соответствие маске осуществляется методом validateEdit после каждого введенного или измененного символа. В случае ошибки генерируется исключение validateError и курсор устанавливается на первый ошибочный символ.
В компоненте можно использовать буфер обмена. Это делается средствами операционной системы пользователем или программно при помощи методов CopyToClipboard, CutToClipboard, PasteFromCiipboard.
Компонент TDBCheckBox
Компонент представляет собой почти полный аналог обычного флажка (компонент TCheckBox) и предназначен для отображения и редактирования любых данных, которые могут иметь только два значения. Это может быть логический тип данных или любые строковые значения, но поле может принимать значения только из двух строк.
Предопределенные значения задаются свойствами valuechecked и ValueUnchecked. По умолчанию они имеют значения True И False. Этим свойствам можно также присваивать любые строковые значения, причем одному свойству можно назначить несколько возможных значений, разделенных точкой с запятой.
Включение флажка происходит, если значение поля набора данных совпадает со значением свойства valuechecked (единственным или любым из списка). Если же флажок включил пользователь, то значение поля данных приравнивается к единственному или первому в списке значению свойства ValueChecked.
Аналогичные действия происходят и со свойством ValueUnchecked.
Компонент TDBRadioGroup
Компонент представляет собой стандартную группу переключателей, состояние которых зависит от значений поля связанного набора данных. В поле можно передавать фиксированные значения, связанные с отдельными переключателями в группе.
Если текущее значение связанного поля соответствует значению какого-либо переключателя, то он включается. Если пользователь включает другой переключатель, то связанное с переключателем значение заносится в поле. Возможные значения, на которые должны реагировать переключатели в группе, заносятся в свойство Values при помощи специального редактора в Инспекторе объектов или программно посредством методов класса Tstrings. Каждому элементу свойства values соответствует один переключатель (порядок следования сохраняется).
Свойство items содержит список поясняющих надписей для переключателей группы. Если для какого-либо переключателя нет заданного значения, но есть поясняющий текст, то такой переключатель включается при совпадении значения связанного поля с поясняющим текстом.
Текущее значение связанного поля содержится в поле value.
Компонент TDBListBox
Компонент отображает текущее значение связанного с ним поля набора данных и позволяет изменить его на любое фиксированное из списка. Функционально компонент ничем не отличается от компонента TListBox. Значение поля должно совпадать с одним из элементов списка. Специальных методов компонент не содержит.
Компонент TDBComboBox
Компонент отображает текущее значение связанного с ним поля набора данных в строке редактирования, при этом значение поля должно совпадать с одним из элементов разворачивающегося списка. Текущее значение можно изменить на любое фиксированное из списка компонента. Функционально компонент ничем не отличается от компонента TDBCombовох, представляющего собой комбинированный список.
Компонент может работать в пяти различных стилях, которые определяются свойством Style.
Специальных методов компонент не содержит.
Компонент TDBMemo
Компонент представляет собой обычное поле редактирования, к которому подключается поле с типом данных Memo или BLOB. Основное его преимущество — возможность одновременного просмотра и редактирования нескольких строк переменной длины. Компонент может отображать только строки, которые целиком видны по высоте.
В компоненте можно использовать буфер обмена при помощи стандартных средств операционной системы или унаследованными от предка TCustomMemo методами CopyToClipBoard, CutToClipBoard, PasteFromClipBoard.
Для ускорения навигации по набору данных при отображении полей типа BLOB можно использовать свойство AutoDisplay. При значении True любое новое значение поля автоматически отображается в компоненте. При значении False новое значение появляется только после двойного щелчка на компоненте или после нажатия клавиши <Enter> при активном компоненте.
Метод LoadMemo используется автоматически при загрузке значения поля, если свойство AutoDispiay = False.
Поведением компонента при работе со слишком длинными строками можно управлять при помощи свойства wordwrap. При значении True слишком длинная строка сдвигается влево при перемещении текстового курсора за правую границу компонента. При значении False остаток длинной строки переносится на новую строку, при этом реально новая строка в данных не создается.
 
Компонент TDBImage
Компонент предназначен для просмотра изображений, хранящихся в базах данных в графическом формате.
Редактировать изображения можно только в каком-либо графическом редакторе, перенося исходное и измененное изображение при помощи буфера обмена. Это делается средствами операционной системы пользователем или программно при помощи методов CopyToClipboard, CutToClipboard, PasteFromClipboard.
Визуализация изображения осуществляется при помощи свойства Picture, которое представляет собой экземпляр класса TPicture.
Также можно полностью заменить существующее изображение или сохранить новое в новой записи набора данных. Для этого используются методы свойства Picture.
Свойство AutoDisplay позволяет управлять процессом загрузки новых изображений из набора данных в компонент. При значении True любое новое значение поля автоматически отображается в компоненте. При значении False новое значение появляется только после двойного щелчка на компоненте или после нажатия клавиши <Enter> при активном компоненте.
Для ускорения просмотра изображений можно применять свойство QuickDraw, которое задает используемую изображением палитру. При значении True применяется стандартная системная палитра. В результате уменьшается время загрузки изображения, но может ухудшиться и качество изображения, в некоторых случаях до полного искажения. При значении False используется собственная палитра изображения и процесс загрузки замедляется.
 
Компонент TDBRichEdit
Компонент предоставляет возможности полноценного текстового редактора для просмотра и изменения текстовых данных, хранящихся в связанном поле набора данных. Поле должно содержать информацию о форматировании текста.
Внешне компонент ничем не отличается от поля редактирования, поэтому о реализации доступа к гораздо более богатым возможностям редактора через интерфейс пользователя должен позаботиться разработчик. Для этого можно использовать дополнительные элементы управления.
Синхронный просмотр данных
При разработке приложений для работы с базами данных часто возникает необходимость в связывании двух наборов данных по ключевому полю. Например, в таблице Orders (содержит данные о заказах) демонстрационной базы данных DBDEMOS имеется поле custNo, которое содержит идентификационный номер покупателя. Под этим же номером в таблице Customers хранится информация о покупателе (адрес, телефон, реквизиты и т. д.). При разработке пользовательского интерфейса приложения баз данных необходимо, чтобы при просмотре перечня заказов в форме приложения отображались не идентификационные номера покупателей, а их параметры.
Таким образом, в наборе данных заказов вместо поля номера покупателя должно появиться поле имени покупателя из таблицы Customers. Механизм связывания полей из различных наборов данных по ключевому полю называется синхронным просмотром. В рассмотренном примере ключевым является поле CustNo из таблицы Customers, а выбор конкретного наименования производится по совпадению значений ключевого поля и заменяемого поля из исходного набора данных — Orders. Причем необходимо, чтобы в таблице Customers поле custNo было уникальным (составляло первичный или вторичный ключ).
Таблицу, в которой расположено поле, значения которого замещаются на синхронные, будем называть исходной таблицей (это таблица Orders).
Таблицу, содержащую ключевое поле и поле данных для синхронного просмотра, будем называть таблицей синхронного просмотра (таблица Customers).
В Delphi механизм синхронного просмотра реализован на уровне отдельных полей и компонентов.
В наборе данных динамически можно создать специальное поле синхронного просмотра, которое будет автоматически замещать одно значение другим в зависимости от значения ключевого поля. Такое поле можно связать с любым рассмотренным выше компонентом отображения данных (см. гл. 13).
Помимо простого синхронного просмотра данных может возникнуть задача редактирования данных в аналогичной ситуации. Для этого предназначены специальные компоненты синхронного просмотра данных, которые позволяют, например, выбирать покупателя из списка, а изменится при этом номер покупателя в наборе данных заказов. Использование таких компонентов делает пользовательский интерфейс значительно более удобным и наглядным. В VLC Delphi есть два таких компонента: TDBLookupListBox И TDBLookupComboBox.
Примечание
На странице Win 3.1 Палитры компонентов имеются еще два компонента: TDBLokupList и TDBLookupCombo. Они обладают тем же набором функций, используются для обеспечения совместимости с приложениями, созданными в среде разработки Delphi 1, и поэтому здесь не рассматриваются.
Механизм синхронного просмотра
Непосредственным предком компонентов синхронного просмотра данных является класс TDBLookupControl, который инкапсулирует список значений для просмотра и сам механизм синхронного просмотра.
Как и в любом другом компоненте отображения данных, в компонентах синхронного просмотра должны присутствовать средства связывания с требуемым полем некоторого набора данных (табл. 15.7). Это уже известные свойства: Datasource — применяется для задания набора данных через компонент TDataSource и DataField — для определения требуемого поля набора данных. Для синхронного просмотра следует выбирать такое поле, значения которого не дают пользователю полной информации об объекте и совпадают с ключевым полем в таблице синхронного просмотра. Название этого поля может не совпадать с названием ключевого поля, но типы данных должны быть одинаковыми.
Примечание 
При проектировании баз данных желательно, чтобы такие поля все же носили одинаковые названия.
Теперь необходимо задать таблицу синхронного просмотра, ключевое поле и поле синхронного просмотра.
Набор данных, содержащий указанные поля, определяется через соответствующий rомпонент TDataSource в свойстве ListSource.
Ключевое поле задается свойством KeyField. Во время работы компонента в свойстве KeyValue содержится текущее значение, которое связывает между собой два набора данных.
Поле синхронного просмотра определяется свойством ListField. Здесь можно задавать сразу несколько полей, которые будут отображаться в компоненте синхронного просмотра. Названия полей разделяются точкой с запятой. Если свойство не определено, то в компоненте будут отображаться значения ключевого поля. Свойство ListFieldindex служит для выбора основного поля из списка. Дело в том, что компоненты синхронного просмотра поддерживают механизм наращиваемого поиска, который позволяет быстро находить нужное значение в больших списках. Свойство ListFieldindex определяет, какое поле используется при наращиваемом поиске. В компоненте TDBiookupComboBox свойство ListFieldindex также определяет, какое поле будет передано в строку редактирования.
Таблица 15.7. Основные свойства, включающие механизм синхронного просмотра


Объявление

Тип

Описание

property KeyFieid: string;

Pb

Ключевое поле таблицы синхронного просмотра

property KeyValue : Variant;

Pu

Текущее значение ключевого поля

property ListFieid: string;

Pb

Поле или список полей синхронного просмотра в таблице синхронного просмотра

property ListFieidindex: Integer;

Pb

Номер основного поля синхронного просмотра (используется, когда свойство ListField содержит список полей)

property ListSource: TDataSource;

Pb

Указывает на компонент TDataSource, связанный с таблицей синхронного просмотра

property NullValueKey:  TShortCut;

Pb

Определяет комбинацию клавиш, нажатие которых задает нулевое значение поля

В качестве примера рассмотрим приложение Demo Lookup (5), в котором с набором данных таблицы Orders из базы данных DBDEMOS связаны компоненты TDBGrid и TDBLооkupрСоmbоВох. Во втором компоненте при перемещении по записям набора данных отображается имя покупателя, оформившего текущий заказ.
Ключевые свойства компонента настроены следующим образом.
Свойство Listsource указывает на компонент custsource типа TDataSource, который связан с набором данных синхронного просмотра custTable.
Свойство ListFieid указывает на поле company, все значения которого доступны в списке компонента.
Свойство KeyField указывает на поле custNo, которое имеется в двух таблицах и по которому осуществляется связь.
Рассмотрим основные свойства и методы самих компонентов отображения данных, за исключением тех, которые представлены в табл. 15.7 и полностью идентичны для двух компонентов.
Компонент TDBLookupListBox
Компонент представляет собой список значений поля синхронного просмотра для поля, заданного свойством DataField, из набора данных DataSource. Его основное назначение — автоматически устанавливать соответствие между полями двух наборов данных по одинаковому значению заданного поля исходной таблицы и ключевого поля таблицы синхронного просмотра. В списке синхронного просмотра отображаются возможные значения для редактирования поля основной таблицы.
По своим функциональным возможностям компонент совпадает с компонентом TDBListBox.
Компонент TDBLookupComboBox
Компонент представляет собой комбинированный список значений поля синхронного просмотра для поля, заданного свойством DataField, из набора данных DataSource. Его основное назначение — автоматически устанавливать соответствие между полями двух наборов данных по одинаковому значению заданного поля исходной таблицы и ключевого поля таблицы синхронного просмотра. В списке синхронного просмотра отображаются возможные значения для редактирования поля основной таблицы.
По своим функциональным возможностям компонент совпадает с компонентом TDBComboBox.
Графическое представление данных
Для представления данных из некоторого набора данных в виде графиков различных видов предназначен компонент TDBChart (табл. 15.8). В нем можно одновременно показывать графики для нескольких полей данных. Графики строятся на основе всех имеющихся в наборе данных значений полей. Функционально компонент ничем не отличается от компонента TChart.
Настройка параметров компонента осуществляется специальным редактором, который можно открыть двойным щелчком на перенесенном на форму компоненте.
Здесь мы не будем подробно останавливаться на богатейших изобразительных возможностях этого компонента, рассмотрим только процесс подключения к нему набора данных и построение графиков.
Основой любого графика в компоненте TDBChart является так называемая серия, свойства которой представлены классом Tchartseries. Для того чтобы построить график значений некоторого поля набора данных, необходимо выполнить следующие действия, большинство из которых выполняется в специализированном редакторе компонента.
1. Создать новую серию и определить ее тип.
2. Задать для серии набор данных.
3. Связать с осями координат нужные поля набора данных и, в зависимости от типа серии, задать дополнительные параметры.
4. Открыть набор данных.
Редактор имеет две главные страницы — Chart и Series. Страница Chart содержит многостраничный блокнот и предназначена для настройки параметров самого графика. Страница Series также содержит многостраничный блокнот и используется для настройки серий значений данных.
Для создания новой серии необходимо в редакторе перейти на главную страницу Chart, а на ней открыть страницу Series (6). На этой странице нужно щелкнуть на кнопке Add, а затем в появившемся диалоге выбрать тип серии. После этого в списке на странице Series появляется строка новой серии. Здесь можно переопределить тип, цвет и видимость серии, щелкнув на соответствующей зоне строки.
Все остальные страницы блокнота на главной странице Chart предназначены для настройки параметров графика.
Теперь необходимо перейти на главную страницу Series и на ней из списка названий серий выбрать необходимую. После этого на странице Data Source из списка выбирается строка DataSet. Далее в появившемся списке DataSet выбирается нужный набор данных. Список X позволяет выбрать поле набора данных, значения которого будут последовательно откладываться по оси абсцисс. Список Y позволяет выбрать поле набора данных, значения которого будут отложены по оси ординат. Соответствие между значениями полей по двум осям определяется принадлежностью к одной записи набора данных. Выбор поля в списке Labels привязывает его значения в виде меток к оси абсцисс.
Примечание 
Здесь описан набор элементов управления для линейного типа серии. Для других типов элементы управления могут отличаться.
Теперь осталось только открыть набор данных и компонент TDBChart построит график.
Аналогичным образом на этот же компонент можно поместить и другие графики.
Таблица 15.8. Свойства и методы компонента TDBChart


Объявление

Описание

Свойства

property AutoRefresh : Boolean;

Разрешает или запрещает обновление данных в серии при открытии связанного набора данных

property Refreshlnterval : Longlnt;

Задает временной интервал в секундах между обновлениями данных в сериях из связанных наборов данных

property ShowGlassCursor : Boolean;

Разрешает показ курсора "песочные часы" при обновлении данных

Методы

procedure CheckDataSource;

Обновляет данные в сериях

function IsValidDataSource (ASeries : TChartSeries; AComponent: TComponent) : Boolean; virtual;

Проверяет, связан ли набор данных AComponent с серией ASeries. В случае успеха проверки возвращает True

procedure RefreshData;

Обновляет данные во всех сериях

procedure Ref reshDataSet (ADataSet : TDataSet; ASeries: TChartSeries);

Считывает все записи в наборе данных AdataSet и переносит их в серию ASeries

Методы-обработчики событий

property OnProcessRecord : TProcessRecordEvent;

Вызывается при переносе данных из отдельной записи набора данных в серию

Резюме

Компоненты отображения данных играют важную роль при создании интерфейсов приложений баз данных. Разнообразие предлагаемых элементов управления позволяет решать любые задачи по организации взаимодействия пользователя с базой данных. Все они взаимодействуют с набором данных через компонент TDataSource.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика