Списочные компоненты

Визуализирующие компоненты типа TDBListBox, TDBComboBox, TDBLookupComboBox, TDBLookupListBox имеют связанные с ними списки TStrings и поэтому дальше объединяются общим названием списочные компоненты БД.

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

Компоненты TDBListBox и TDBLookupListBox могут отображать текущее значение связанного с ними поля только в том случае, если это значение совпадает с одним из списочных значений компонента, два других отображают любое значение поля, даже если этого значения нет в связанных с компонентами списках. Точно так же вводить новое значение компоненты XXXXListBox могут только из своих списков, в то время как компоненты XXXXComboBox в модификациях csSimple и csComboBox содержат текстовую строку для ввода значения, которого нет в списке.

Компоненты TDBLookupXXXX могут использоваться двумя способами: если в редактируемом НД есть нужное подстановочное поле, для них, как и для других рассматриваемых в этом разделе компонентов, достаточно определить лишь свойства DataSource и DataField, причем в последнем указать имя подстановочного поля; если в НД нет подстановочного поля, в свойство DataSource помещается имя компонента-источника, связанного с редактируемым НД, в свойство DataField - имя поля с шифром (ссылочного поля) этого НД, в свойство ListSource - имя компонента-источника, связанного с подстановочным НД, в ListField - имя отображаемого (результирующего) поля и, наконец, в KeyField - имя индексного поля, на которое ссылается поле DataField редактируемого НД. Например, в форме на рисунке 12.9 компонент TLookupComboBox используется для отображения имени партнера. В первом варианте использования в его свойство DataSource нужно поместить значение DM. DataSource1, а в свойство DataField - имя подстановочного поля Firm. Во втором варианте предварительно в модуле данных нужно разместить компонент DataSource3, связав его с НД Firms, в свойство DataSource по-прежнему помещается значение DM. DataSource1, а вот в свойство DataField - имя подстановочного поля NFirm, при этом в ListSource - значение DM. DataSource3, в ListField - Fname и в KeyField - FirmID. Способ использования компонента не имеет значения: в любом случае в поле NFirm НД tbNakls будет помещен шифр выбранного партнера.