Шаг 5.
Компоненты библиотеки RX.
Вкладка RX DBAware. Компонент TRxDBLookupCombo

    На этом шаге мы рассмотрим компонент TRxDBLookupCombo.

   Компонент TRxDBLookupCombo почти полностью аналогичен стандартному компоненту из VCL TDBLookupCombo и имеет те же самые свойства, методы и события. Однако у этого компонента есть некоторые дополнительные возможности и свойства.

   TRxDBLookupCombo позволяет использовать в качестве LookupSource любой источник данных - как TTable, так и TQuery, при этом свойство LookupField не обязательно должно быть индексированным полем.


Рис.1. Компонент TRxDBLookupCombo

   Компонент TRxDBLookupCombo также позволяет производить поиск нужного термина при наборе первых букв этого термина. Если свойство IgnoreCase установлено в True, то при наборе пользователем первых букв термина регистр символов не учитывается.

   Свойтсво DisplayEmpty позволяет задать текстовую строку для отображения в строке TRxDBLookupCombo, когда не сделано никакого выбора. Вызов метода ResetField приводит к очистке содержимого компонента, устоновке значения Value в пустую строку, и отображению значения DisplayEmpty.

   В дополнение к событию OnDropDown, имеющемуся у TDBLookupCombo, компонент имеет событие OnCloseUp, вызываемое при закрытии выпадающего списка. Метод IsDropDown позволяет определить текущее состояние выпадающего списка выбора. Событие OnChange происходит при смене значения cвойства Value.

   Компонент также позволяет задать изображения для рисования в левой части каждой строки списка, в зависимости от содержимого полей БД, с помощью события OnGetImage.

   При присвоении значений свойству Value или DisplayValue компонент TRxDBLookupCombo или TRxDBLookupList безошибочное позиционирование на соответствующую запись в списке произойдет только в том случае, если соответствующее поле в подмножестве записей, заданном источником данных DataSource, имеет только уникальные неповторяющиеся значения. В противном случае вы получите несколько "выбранных" элементов в списке (причем реально будет выбран только один самый первый), значения полей в которых равны заданному. Избегайте таких ситуаций!

   При работе с некоторыми SQL-серверами БД установка свойств IndexSwitch или IgnoreCase в значение True может приводить к неожиданному поведению компонента. В этом случае постарайтесь добиться "правильного" поведения за счет комбинирования разных значений свойств IgnoreCase и IndexSwitch .

   Рассмотрим подробнее некоторые свойства компонента:

Таблица 1. Свойства компонента TRxDBLookupCombo
Свойство Описание
property IgnoreCase: Boolean; Свойство определяет, будет ли учитываться регистр вводимых символов при поиске термина путем набора его первых букв. Если значение свойства True (по умолчанию), то регистр не учитывается.
property IndexSwitch: Boolean; Свойство IndexSwitch определяет, будет ли при необходимости производиться переключение индексов таблицы (если источником данных служит таблица BDE, а не результат запроса). В случае использования больших SQL-таблиц переключение индексов может занять длительное время, поэтому в таких случаях свойство желательно устанавливать в значение False.
property DisplayEmpty: string;

Свойство задает значение DisplayValue в том случае, если никакого выбора не сделано и значение Value равно значению свойства EmptyValue (по умолчанию - пустой строке). В списке отображается дополнительной строкой в верхней части списка с использованием цвета EmptyItemColor и не скролируется (остается всегда видимым и доступным для выбора).
procedure ResetField; Метод осуществляет "очистку" компонента, то есть отменяет сделанный ранее выбор какого-либо корректного значения и устанавливает свойство Value в EmptyValue и DisplayValue в значение DisplayEmpty (по умолчанию оба - пустая строка).
property Value: string;

Run-time only. Значением свойства Value является содержимое DataField для текущей записи в первичном наборе данных. Когда пользователь перемещается в первичном наборе данных, значение свойства Value изменяется.
function IsDropDown: Boolean; Функция возвращает True, если в настоящее время "развернут" выпадающий список выбора, False - в противном случае.
property LookupDisplayIndex: Integer; В случае, если свойство LookupDisplay задает более одного поля для отображения в списке, значение свойства LookupDisplayIndex определяет номер поля, значение которого возвращается свойством DisplayValue и отображается в строке компонентf TrxDBLookupCombo.
property OnGetImage: TGetImageEvent; Событие позволяет задать картинку (битовое изображение, иконку и т.д.), которая будет изображаеться в левой части строки списка. В обработчике события вы можете определить значение параметра TextMargin, определяющее отступ текста от левого края списка (рекомендуется задавать это значение одинаковым для всех строк списка) и значение параметра Graphic, определяющего изображение для рисования. В обработчике события текущая запись Lookup-набора данных (заданного свойством LookupSource) соотвествует той, для которой вы будете задавать изображение, таким образом вы можете проверить содержимое этой записи и заданнное вами графическое изображение будет зависеть от наполнения полей БД. В компоненте TRxDBLookupCombo имеет смысл параметр события IsEmpty. Если передано значение True, то этот обработчик будет определять картинку для "пустого" значения Value (если задано непустое значение свойства DisplayEmpty), и в этом случае вы не должны обращаться к полям LookupSource.

    Компонент TRxDBLookupCombo можно связать с таблицой и выбирать значение из списка.

    Например, поместим на форму компоненты RxDBGrid1, Table2, DataSource2 – для связи базы данных и таблицы, RxDBLookupCombo1, RxSpeedButton1 (рис.2).


Рис.2. Форма с размещенными на ней компонентами RxDBGrid1, Table2, DataSource2, RxDBLookupCombo1, RxSpeedButton1

   С помощью кнопки RxSpeedButton1 (Caption = ‘Очистить') можно произвести "очистку" компонента, то есть отменить сделанный ранее выбор какого-либо значения.

   Установим свойство LookupSource компонента RxDBLookupCombo1 в значение DataSource2, LookupField - в значение ‘Телефон', тогда, выбирая в строке редактирования компонента значение, в таблице будет происходить позиционирование на строку, имеющую это значение (рис.3(а-в)).


Рис.3а. Выбор строки в списке не совершен


Рис.3б. Открыт выпадающий список


Рис.3в. Выбрана вторая строка в списке

    Текст этого примера можно взять здесь.

   На следующем шаге мы рассмотрим компонент TRxDBLookupEdit.




Предыдущий шаг Содержание Следующий шаг