Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Нв семинар.doc
Скачиваний:
2
Добавлен:
10.08.2019
Размер:
119.3 Кб
Скачать

11. Визуальные компоненты для работы с текущей записью набора данных

11.1. Компонент TDBText

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

Для использования компонента TDBText нужно:

• указать в свойстве property DataSource: TDataSource; имя соответствующего компонента TDataSource, связанного с НД;

• указать в параметре property DataField: String; имя поля. При заполненном свойстве DataSource в инспекторе объектов, когда мы устанавливаем значение свойства DataField, появляется список:

- имен полей, определенных в редакторе полей;

- имен всех полей НД, на который ссылается соответствующий компонент TDataSource, ест редактор полей не применялся.

Пример. Пусть имеем ТБД "TOV.DB", в состав записи которой входят поля GrNum (номер группы товаров) и Tovar (наименование товара). Требуется в компоненте TDBGrid показывать только наименования товаров, а внизу, под TDBGrid - номер группы для текущей записи в НД.

Расположим в форме компоненты DataSourcel, Table1 (указывающий на ТБД "TOV.DB") и DBGridI, связанные между собой стандартным образом. Расположим также в форме компоненты Label 1 (свойство Caption = 'Номер группы текущей записи - ') и DBTextl (рис. 11.1).

Назначим в инспекторе объектов свойства DBTexlt.DalaSource = DataSourcel и DBTextl. DataField = GrNum. Тогда во время выполнения приложения DBTextl будет показывать содержимое поля GrNum текущей записи.

11.2. Компонент tdbEdit

Компонент TDBEdit позволяет редактировать значение строкового поля текущей записи НД. Он повторяет функциональность компонента TEdit (позволяющего корректировать значение переменной), но источником данных и их приемником в этом случае служит поле НД. Поэтому для TDBEdit необходимо указывать свойства

property DataSource: TDataSource; - имя компонента DataSource, определяющего НД; *

property DataField: string; - имя редактируемого поля;

property ReadOnly: Boolean; - если содержит True, значение поля доступно только для чтения, если False - значение поля можно изменять.

Пример. Пусть необходимо корректировать, изменять, удалять текущую запись в НД, связанном с ТБД "TOV.DB" (товары), в состав записи которой входят поля GrNum (номер группы товаров) и Tovar (наименование товара).

Поместим в форму компоненты Table1 (связанный с ТБД "TOV.DB") и DataSource 1, указывающий на Table I. Пусть группа кнопок реализует перевод НД в режимы dslnsert, dsEdit, а также обращение к методам Delete, Post, Cancel. Поместим в форму компоненты DBEdit1 (указывает на поле GrNum) и DBEdit2 (указывает на поле GrNazv). При добавлении новой записи или при изменении существующей необходимо вводить и корректировать значения полей в компонентах DBEdit1 и DBEdit2 (рис. 11.2).

При вводе значения в TDBEdit приложение автоматически отслеживает, чтобы введенное значение было совместимо по формату с полем набора данных, с которым связан данный компонент TDBEdit. Ввод неверных значений блокируется. Например, если в компонент TDBEdit, связанный с полем типа даты и времени, попытаться поместить строковое значение, будет возбуждено исключение.

Свойство property Text: string; хранит текущее содержимое поля НД в текстовом виде.

Событие property OnChange: TNotifyEvent; наступает при изменении значения поля.

События property OnEnter: TNotifyEvent; property OnExit: TNotifyEvent; наступают при получении и утрате фокуса управления компонентом TDBEdit.

11.3. Компонент tdbCheckBox

Компонент TDBCheckBox позволяет "отметить" и "снять отметку" с логического поля в составе текущей записи НД.

Он обладает функциональностью компонента TCheckBox, но источником данных и их приемником в этом случае служит поле НД.

Свойства property DataSource: TdataSource; property DataField: string;. property ReadOnly: Boolean; имеют такое же назначение, как и аналогичные свойства компонента TDBEdit.

Пример. Расширим пример, приведенный выше для компонента TDBEdit. Пусть в ТБД "TOV.DB" имеется поле Uzenka (тип Boolean). Значение True в этом поле означает, что товары данной группы подлежат уценке, значение False - не подлежат.

Добавим в форму компонент DBCheckBox1 (свойство DataSource = DataSource1, свойство DataField = Uzenka). Тогда в процессе работы можно устанавливать в данное поле значения True или False, делая или не делая отметки DBCheckBox1 (рис. 11.3).

ЗАМЕЧАНИЕ. При показе содержимого НД Table1 в TDBGrid в столбце Uzenka для тех записей, у которых поле Uzenka содержит True, выводится символ '+', а для тех записей, у которых поле Uzenka содержит False - ничего не выводится. Такая функциональность реализуется в следующем обработчике события OnGetText для поля Uzenka (компонент Table1 Uzenka).

procedure TForm1.Table1UzenkaGetText(Sender: TField;

var Text: string;

DisplayText: Boolean);

begin

IF DisplayText and Table1Uzenka.Value THEN Text := '+' ;

end;

Напомним, что событие OnGetText наступает перед показом содержимого поля каждой записи в визуальных компонентах.

Свойство

property Checked : Boolean;

позволяет определить, отмечено поле, на которое ссылается TDBCheckBox (значение True) или не отмечено (False).

Свойство

property State: TCheckBoxState;

возвращает состояние поля. Возможные значения:

cbUnchecked- поле не отмечено;

cbChecked - поле отмечено;

cbGrayed - промежуточное состояние, когда поле не отмечено, но в нем показывается серый символ отметки. Он означает, что поле не содержит ни True, ни False, а содержит пустое значение. Именно это состояние присуще компоненту DBCheckBoxl при добавлении записей в приводившемся выше примере. Добиться того, чтобы во вновь добавляемых записях поле Uzenka по умолчанию содержало значение False можно в обработчике события OnNew Record компонента Table1 (событие наступает всякий раз при добавлении новой записи):

procedure TForm1.Table1NewRecord(DataSet: TDataSet) ;

begin

Table1Uzenka.AsBoolean := False;

end;

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

Свойство

property ValueChecked: string;

устанавливает значения поля, при которых TDBCheckBox переходит в состояние cbChecked. При наличии нескольких значений они разделяются точкой с запятой:

DBCheckBox1.ValueChecked := 'True;Yes;On;Дa;Д';

Свойство

property ValueUnchecked: string;

устанавливает значения поля, при которых TDBCheckBox переходит в состояние cbUnchecked. При наличии нескольких значений они разделяются точкой с запятой:

DBCheckBoxl.ValueUnchecked := 'False;No;Off; Нет;Н';

События

property OnEnter: TNotifyEvent;

property OnExit: TNotifyEvent;

наступают при получении и утрате фокуса управления компонентом.

Событие

property OnClick: TNotifyEvent;

наступает, если на компоненте TDBCheckBox щелкнуть мышью. Поскольку именно таким образом происходит снятие отметки или отметка компонента, данное событие может использоваться для оценки изменения значения свойства Checked.