Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Lookup-поле в DBGridEh   Найти похожие ветки 

 
kalishenko   (2004-04-09 10:44) [0]

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


 
Sergey13 ©   (2004-04-09 11:01) [1]

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


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

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


 
Johnmen ©   (2004-04-09 12:32) [3]

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


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

И так по порядку, как в 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 то можно найти множество настроек для
выпадающего списка и поиска, хотя основной принцип тот-же.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
1-1082957632
voprosik
2004-04-26 09:33
2004.04.11
Динамический PopUp


14-1082528376
VID
2004-04-21 10:19
2004.04.11
Как создать загрузочный диск, который будет видеть NTFS ?


1-1079950071
Leech
2004-03-22 13:07
2004.04.11
Delay во время выполнения либо ответ от rar...


14-1082378534
Yanis
2004-04-19 16:42
2004.04.11
HTML


3-1079080624
HeoGtan
2004-03-12 11:37
2004.04.11
Вопрос по D7+IB 6.5