Флажок DBCheckBox можно применять также для отображения и редактирования строковых полей, если воспользоваться свойствами ValueChecked и ValueUnChecked.
Свойство ValueChecked типа string содержит строковые значения, которые устанавливают связанный с этим полем флажок во включенное состояние. Отдельные значения разделяются точкой с запятой. В качестве значений допускаются любые алфавитно-цифровые символы, в том числе русские буквы. Регистр алфавитных символов не различается, т. е. значения да и да считаются одинаковыми. Например: DBCheckBoxl.ValueChecked:= 'True;T;Yes;Y;Да;Д';
Свойство ValueUnChecked типа string содержит строковые значения, которые устанавливают связанный с этим полем флажок в выключенное состояние. Значения задаются таким же образом, как и для свойства ValueChecked: DBCheckBoxl.ValueUnChecked:= 'False;F;No;N;Нет;Н';
Если поле не содержит ни одного из значений, указанных в свойствах ValueChecked и ValueUnChecked, то флажок устанавливается в неопределенное состояние.
Отметим, что несмотря на наличие приведенных свойств, возможности флажка DBCheckBox по редактированию строковых полей намного меньше, чем у элемента DBEdit.
136
Часть II. Технологии доступа к данным
Отображение и выбор значения поля
В ряде случаев возникает необходимость ввода или отображения в поле одного из значений, входящих в состав фиксированного набора. С этой целью удобно использовать компонент DBRadioGroup (рис. 6.1), представляющий собой группу зависимых переключателей, из которых в каждый момент времени может быть включен (выбран) только один. Зависимые переключатели также называют просто переключателями; в форме они отображаются в виде кружка с текстовой надписью.
Рис. 6.1. Использование переключателей
Отметим, что выбрать для поля одно из значений можно также с помощью списков, которые представляют для этих целей более широкие возможности.
|
Управление числом и названиями переключателей производится с помощью свойства items типа TStrings, позволяющего получить доступ к отдельным переключателям в группе. Это свойство содержит строки, отображаемые как заголовки переключателей. Отсчет строк в массиве начинается с нуля: items [0], items [1] и т. д. Обычно задание значений этого свойства выполняется при разработке приложения с помощью Редактора строк. При выполнении приложения для манипуляции со строками (заголовками) можно использовать такие методы, как Add и Delete.
Свойство Values типа TStrings содержит список значений поля, на которые должны реагировать переключатели группы. Управление этим списком осуществляется аналогично управлению списком items. Если возможные значения свойства Values не заданы, то они выбираются из значений свойства items, т. е. в этом случае значение, соответствующее переключателю, совпадает с названием этого переключателя.
Глава 6. Визуальные компоненты для работы с данными
137
Группа переключателей работает следующим образом. Переключатель включается при переходе к очередной записи, если значение связанного с ним поля содержит одно из значений, присутствующих в списке Values. Если же поле содержит значение, отсутствующее в списке возможных, то ни один переключатель не выбирается. Изменение значения поля происходит при выборе другого переключателя группы.
(Замечание^
Для поля, с которым связана группа переключателей, пользователь может выбрать значение только из списка. Попытки ввести в поле произвольное значение, например с помощью компонента DBGrid, блокируются.
|
В примере, приведенном на рис. 6.1, группа переключателей имеет заголовок Условия продажи и связана с полем Note набора данных. При перемещении на шестую запись в группе автоматически выбирается третий переключатель, имеющий название (и такое же значение) Оптом и в розницу. Если выбрать другой переключатель, например первый, то в поле Note шестой записи автоматически занесется новое значение — Оптом.
СЗамечание ^
Новое значение поля будет зафиксировано в наборе данных и отображено другими визуальными компонентами (DBGrid и подобными) после потери фокуса группой переключателей, например, в связи с переходом к другой записи.
Доступ к отдельному переключателю можно получить через свойство itemindex типа integer, содержащее позицию (номер) переключателя, выбранного в группе в текущий момент. Это свойство используется для выбора отдельного переключателя или для определения, какой из переключателей является выбранным. Если свойство itemindex имеет значение -1, то не выбран ни один из переключателей.
СЗамечание ^
При программном выборе переключателя необходимо переводить набор данных в режим редактирования, а после установки нового значения поля закреплять сделанные изменения, например, вызовом метода Post.
Вот пример, иллюстрирующий выбор переключателя на программном уровне:
procedure TForml.ButtonlClick(Sender: TObject);
begin
Tablel.Edit;
DBRadioGroupl.Itemindex:= 1;
Tablel.Post;
end;
138
Часть II. Технологии доступа к данным
В приведенной процедуре при нажатии кнопки Buttonl в группе DBRadioGroupl выбирается второй переключатель. Предварительно набор данных переводится в режим редактирования, а после переключения и смены значения поля сделанные изменения сохраняются.
|
Отображение и выбор значения поля в списке
Чтобы отобразить поле текущей записи и выбрать этому полю новое значение,
служат СПИСКИ — КОМПОНеНТЫDBListBox, DBComboBox, DBLookupComboBox И
DBLookupListBox. По своей функциональности списки напоминают группу переключателей DBRadioGroup, однако предоставляют большие возможности. Список DBComboBox также обеспечивает возможность ввода в поле произвольного значения.
Простой и комбинированный списки
Компоненты DBListBox и DBComboBox позволяют пользователю выбирать один из строковых элементов. При выборе нужной строки простого списка DBListBox содержащееся в ней значение автоматически заносится в поле, с которым связан этот список. В дополнение к этому комбинированный список DBComboBox позволяет вводить произвольное значение.
Замечание
J
Рис. 6.2. Использование простого списка |
Новое значение не фиксируется в поле и, соответственно, не отображается в других визуальных компонентах, связанных с этим же набором данных. На рис. 6.2 в списке для поля unit выбрано новое значение Упаковка, однако в сетке DBGrid это не отображается. Закрепление в поле нового значения, а также отображение этого значения в других визуальных компонентах, связанных с данным полем, произойдет при переходе к другой записи.
Глава 6. Визуальные компоненты для работы с данными
139
Списки, сформированные