Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Lookup-поле в DBGridEh [D6, Paradox]


kalishenko ©   (2004-04-09 10:44:00) 

Народ, помогите разобраться с гридом из EhLib. Никак не могу настроить lookup-поле в этой сетке. Да и хелп по нему какой-то скудный. Расскажите, если не трудно по шагам.


ПавелТ   (2004-04-09 12:56:00) [1]

И так по порядку, как в TDBGridEh сделать лукап поле.
На самом деле лукап поле - это специальный тип поля в датасете.
Вот как это делается в IBX (для других датасетов думаю аналогично, но я их редко использую):
Пусть есть две таблицы А и LINK.
Таблица А содержит поля: (Integer)A_ID, (varchar(20))NAME
Таблица LINK: (Integer)LINK_ID, (Integer)A_ID foreign key A.A_ID
Мы хотим чтобы у нас отображались в сетке данные из LINK, но вместо A_ID там было A.NAME с возможностью выбора
1. Бросаем на форму IBDataSet1, в SelectSQL следующее 'select LINK_ID, ID_A from LINK'

2. Бросаем на форму IBQuery1, в SQL 'select ID_A, NAME from A'
 (откроем после этого датасет и кверь)

3. Правый клик по IBDataSet1->FieldsEditor..., в открывшемся окошке правый клик Add all fields.
В результате у нас добавятся поля LINK_ID и ID_A.

4. Опять правый клик в редакторе полей IBDataSet1 и нажимаем NewField.

Это будет наше лукап поле. В открывшемся диалоге указываем произвольное имя поля (не такое как в БД)
пусть это будет A_LOOKUP. Тип его должен совпадать с A.NAME, то есть в случае с IBX это String, размер=20
А теперь собственно прикол: FieldType выставляем Lookup. После этого становится доступными эдиты Key Fields - в
нем указываем по какому полю дочерней таблицы (LINK) будем делать лукап, здесь ставим ID_A;
в эдите Dataset укажем IBQuery1 (датасет из которого бум делать лукап); Lookup Keys - значение какого поля
родительской таблицы (из которой делаем лукап - A) должно совпадать со значением поля указанного в Key Fields
дочерней (LINK) у нас это A.ID_A; ResultField - значение какого поля будет отображаться (A.NAME).

5. Теперь через DataSource связываем грид с IBDataSet1 и видим, что у нас там появилось три колонки
LINK_ID - ид из LINK
ID_A - форейн кей из LINK на А
A_LOOKUP - значения A.NAME для A.ID_A=LINK.ID_A

Теперь осталось сделать выпадающий список. Особенность реализации TDBGridEh такова, что она не даст
выпадающтй список, пока не пропишешь IBDataSet1.ModifySQL, засим там пишем:
'update LINK set ID_A=:ID_A where LINK_ID=:LINK_ID'

Это самый простой способ, но если покопаться в свойствах TDBGridEh то можно найти множество настроек для
выпадающего списка и поиска, хотя основной принцип тот-же.


Johnmen   (2004-04-09 12:32:00) [2]

Скажем так - какое отношение имеют средства отображения (всякие гриды) к отображаемым данным (датасет) ?
Раздел lookup fieldsи ссылки из хелпа читать до полного просветления...


kalishenko   (2004-04-09 11:45:00) [3]

А че в нем настраивать-то? И какое отношение имеет датасет к конкретному полю, которое я хочу сделать lookup. Я пытался настроить Columns -> Выбираю соот. поле -> DropDownBox -> ListSource -> а уже в нем DataSet. Далее в MasterSource делаю связь по двум полям, которые являются ключевыми в своих таблицах, но после запуска проги, нажимая на соответствующее поле появляется какой-то "калькулятор", а не список значений, заведенный в подчиненной таблице. Что не так?


Sergey13   (2004-04-09 11:01:00) [4]

Настраивай не грид а датасет. И все будет тип-топ.


Наверх

Титульная страница Поиск, карта сайта Написать письмо