|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Формировать DataSource и DataField динамически в зависимости от RadioButton
Приветствую.
Никогда не думал, что придется писать программу на delphi, да и еще к тому же работающую с базой данных. Но в связи с производственной необходимостью пришлось это делать. Половина функционала уже есть, но произошел затык в одном моменте. Итак: Имеется БД MS Access работающая через ADO с приложением. На форме расположено 5 радиокнопок и 1 DBComboBox. А затык в том, что как я и писал в сабже DataSource и DataField должны задаваться динамически в зависимости от активного RadioButton. Пытался делать это так Код:
procedure TNewCardForm.AtmRadioButtonClick(Sender: TObject); begin if AtmRadioButton.Checked = True then UstrDBComboBox.DataSource := DataModule2.AtmSource; UstrDBComboBox.DataField := 'nomeratm'; end; Помогите новичку, подскажите как правильно написать код. И еще, например, при активной 5-й радиокнопке DBComboBox становится неактивным. Это тоже подскажите пожалуйста. |
#2
|
|||
|
|||
Ну во первых,
Код:
procedure TNewCardForm.AtmRadioButtonClick(Sender: TObject); begin if AtmRadioButton.Checked then begin UstrDBComboBox.DataSource := DataModule2.AtmSource; UstrDBComboBox.DataField := 'nomeratm'; end; end; |
#3
|
|||
|
|||
Спасибо за корректировку.
А проблема, в том что выпадающий список не создается в DBComboBox, там пусто... upd Оказывается надо было использовать DBLookupComboBox. После этого все отобразилось, но только не получается переключать разные источники данных в зависимости от радио кнопки Последний раз редактировалось Gover, 29.03.2010 в 23:39. |
#4
|
|||
|
|||
Ну так что? Икто и неподскажет?
У меня ошибку дает при переключении на вторую радиокнопку. Код такой Код:
procedure TNewCardForm.AtmRadioButtonClick(Sender: TObject); begin if AtmRadioButton.Checked then begin DBLookupComboBox2.Enabled := true; DBLookupComboBox2.ListSource := DataModule2.AtmSource; DBLookupComboBox2.KeyField := 'idatm'; DBLookupComboBox2.ListField := 'NomerAtm'; end; end; procedure TNewCardForm.InfRadioButtonClick(Sender: TObject); begin if InfRadioButton.Checked then begin DBLookupComboBox2.Enabled := true; DBLookupComboBox2.ListSource := DataModule2.InfSource; DBLookupComboBox2.KeyField := 'idinf'; DBLookupComboBox2.ListField := 'NomerInf'; end; end; |
#5
|
|||
|
|||
ну тебе ж английским языком сказали - нет такого поля. Проверь имя поля в соотв. датасете.
|
#6
|
|||
|
|||
Ну как это нет, если поле есть.
Может у этого комбобокса есть свой ство какое-то при котором нужно очищать предыдущие результаты? |
#7
|
|||
|
|||
А ты попробуй сначала закрыть комбобокс, потом выполнить изменения полей, затем опять открыть
Код:
DBLookupComboBox2.Enabled := False; DBLookupComboBox2.ListSource := DataModule2.InfSource; DBLookupComboBox2.KeyField := 'idinf'; DBLookupComboBox2.ListField := 'NomerInf'; DBLookupComboBox2.Enabled := true; |
#8
|
|||
|
|||
Может надо датасет отключать, а затем включать? с Комбобоксом не срабатывает
|
#9
|
|||
|
|||
Такая же фигня. Пробуй так:
Код:
procedure TNewCardForm.AtmRadioButtonClick(Sender: TObject); begin if AtmRadioButton.Checked then begin DBLookupComboBox2.Enabled := true; DataModule2.AtmSource.Enabled:=false; DBLookupComboBox2.ListSource := DataModule2.AtmSource; DBLookupComboBox2.KeyField := 'idatm'; DBLookupComboBox2.ListField := 'NomerAtm'; DataModule2.AtmSource.Enabled:=true; end; end; procedure TNewCardForm.InfRadioButtonClick(Sender: TObject); begin if InfRadioButton.Checked then begin DBLookupComboBox2.Enabled := true; DataModule2.InfSource.Enabled:=false; DBLookupComboBox2.ListSource := DataModule2.InfSource; DBLookupComboBox2.KeyField := 'idinf'; DBLookupComboBox2.ListField := 'NomerInf'; DataModule2.InfSource.Enabled:=true; end; end; |