Конференция "Базы" » DBLookupComboBox и FireMonkey
 
  • Alez © (12.04.12 23:48) [0]
    Здравствуйте.
    Более менее простые способы работы с базами и привязку полей БД к независимым контролам типа Edit или Label через LiveBindings в FireMonkey в Интернете найти можно, но вот как же сделать аналог DBLookupComboBox в FM ума не приложу, и нигде нет инфы на этот счёт, одни только вопросы у людей.
    Кучу кода под каждый комбо бокс писать не хочется, сторонних компонентов тоже не нашёл.

    Есть ли простой способ воспроизвести DBLookupComboBox в FireMonkey?

    Delphi XE2.
  • Alez © (13.04.12 22:10) [1]
    Пока с чем я разобрался.
    а.) Заливаем список для заполнения 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'а. Теперь как нас сделать так что бы в базу записывалось не ПИСЬМЕННОЕ значение, а ИНДЕКС? И в обратном направлении, доставался не ИНДЕКС, а ПИСЬМЕННОЕ значение?
  • Alez © (16.04.12 01:38) [2]
    в.) Связываем значение 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'а???
  • Alez © (16.04.12 01:41) [3]
    Хотя я думаю последний пункт "в" не верен, потому что лайфбиндинг будет одновременно пытаться и доставать и записывать значения из/в базу. Поэтому нужно чё то типа двунаправленного биндинга делать что ли...
  • sniknik © (16.04.12 08:02) [4]
    > как привязать KEY записи из поля базы данных и поменять курсор на этот KEY у simpledataset'a нашего ComboBox'а???
    записывать объект в него, а не строку. в объекте можно держать что угодно, хоть все поля записи.
  • Alez © (16.04.12 13:22) [5]
    А как же лайфиндить что бы записывался объект? Там же биндится значение к значению, а там что бы записать объект целая процедура... "combobox1.Items.AddObject('string',TObject);"

    Если бы можно было бы как нибудь прибиндить Simpledataset.Locate('id', 'значение id', []);
  • Alez © (16.04.12 13:41) [6]
    Ды и даже если запишем, не понятно как листать комбо бокс по ключевому полю, а не поиндесу через лайфибиндинг....
  • Alez © (16.04.12 13:52) [7]
    Вот здесь " http://stackoverflow.com/questions/7463230/db-lookup-field-with-firemonkey-and-delphi-xe2 " кто-то говорит что у него получилось сделать это при помощи TBindPosition, но он не описал как :(
 
Конференция "Базы" » DBLookupComboBox и FireMonkey
Есть новые Нет новых   [134431   +9][b:0][p:0]