-
Здравствуйте. Более менее простые способы работы с базами и привязку полей БД к независимым контролам типа Edit или Label через LiveBindings в FireMonkey в Интернете найти можно, но вот как же сделать аналог DBLookupComboBox в FM ума не приложу, и нигде нет инфы на этот счёт, одни только вопросы у людей. Кучу кода под каждый комбо бокс писать не хочется, сторонних компонентов тоже не нашёл.
Есть ли простой способ воспроизвести DBLookupComboBox в FireMonkey?
Delphi XE2.
-
Пока с чем я разобрался. а.) Заливаем список для заполнения ComboBox'а 1)Кидаем на форму SimpleDataSet1, DataSource, BindScopeDB. Связываем их. 2)Кидаем BindingList, кликаем два раза на него. 3)Правой кнопкой -> NewBinding -> TBindList. 4)Заходим в него. Жмём правой кнопкой Add. Control Expression пишем - Text. Soure Expression пишем FieldByName("Поле для заполнения").AsString 5)Выходим отсюда. Жмём BindList1, указываем ему ControlComponent = Combobox1, SourceComponent = BindScopeDB2.
б.) Связываем курсор SimpleDataSet2'a (куда будем записывать) и ItemIndex комбобокса 1)BindingList кликаем два раза. 2)Правой кнопкой -> NewBinding -> TBindPosition. 3)Кликаем два раза на него. Внутри каждого PosControl, PosSource, PosClear добавляем Add. 4)Указываем первому ItemIndex и RecNo-1, второму ItemIndex+1 и RecNo, третьему ItemIndex и -1. 5) Выходим отсюда. Жмём BindPosition1, указываем ему ControlComponent = Combobox1, SourceComponent = BindScopeDB2.
Теперь у нас заполняется список и связывается курсор у Combobox'а. Теперь как нас сделать так что бы в базу записывалось не ПИСЬМЕННОЕ значение, а ИНДЕКС? И в обратном направлении, доставался не ИНДЕКС, а ПИСЬМЕННОЕ значение?
-
в.) Связываем значение PRIMARY KEY текущей позиции ComboBox'а с полем в БД. 1)BindingList кликаем два раза. 2)Правой кнопкой -> NewBinding -> TBindLink. 3)Заходим в него. Жмём Format, добавляем новый Add. 4)Control Expression пишем - FieldByName("Поле куда будет записываться индекс").AsInteger. Soure Expression AsInteger для конвертации.
Теперь у нас еще и записывается в базу PRIMARY KEY вместо текстового значения.
Остался последний момент - как привязать KEY записи из поля базы данных и поменять курсор на этот KEY у simpledataset'a нашего ComboBox'а???
-
Хотя я думаю последний пункт "в" не верен, потому что лайфбиндинг будет одновременно пытаться и доставать и записывать значения из/в базу. Поэтому нужно чё то типа двунаправленного биндинга делать что ли...
-
> как привязать KEY записи из поля базы данных и поменять курсор на этот KEY у simpledataset'a нашего ComboBox'а??? записывать объект в него, а не строку. в объекте можно держать что угодно, хоть все поля записи.
-
А как же лайфиндить что бы записывался объект? Там же биндится значение к значению, а там что бы записать объект целая процедура... "combobox1.Items.AddObject('string',TObject);"
Если бы можно было бы как нибудь прибиндить Simpledataset.Locate('id', 'значение id', []);
-
Ды и даже если запишем, не понятно как листать комбо бокс по ключевому полю, а не поиндесу через лайфибиндинг....
-
|