Главная страница
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.029 c
14-1079370428
txt
2004-03-15 20:07
2004.04.11
КТО ОТЛИЧНО ЗНАЕТ Delphi И НЕПРОЧ ЗАРАБОТАТЬ??


1-1079699562
sherminator
2004-03-19 15:32
2004.04.11
окна винды


8-1076356910
Maksss
2004-02-09 23:01
2004.04.11
сходство в картинках


14-1082047233
Detonator
2004-04-15 20:40
2004.04.11
Работа с POP3-сервером


14-1077351091
syte_ser78
2004-02-21 11:11
2004.04.11
некоректное определение матерью процессора