![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Доброе время суток.
Трабл такой - есть Grid, где надо использовать выпадающий список (Lookup). Для Grid'a Datasourse представляет собой запрос (TQuery) с опцией LiveRequest=True. Согласно тому, что написано в книжке, я прописываю в конструкторе поля запроса. Теперь то поле, которое должно выпадать, я объявляю как fkLookup. Естественно, указан LookupDataSource (тоже запрос), прописаны поля (LookupKeyField - указан ID, LookupResultField - указано NAME). Вроде бы все нормально. Но при компиляции и запуске в нужном поле Grid'a на самом деле ничего не выпадает, поле ведёт себя, как обычное поле. Подскажите, если не сложно, где я ошибся. --------------------
C уважением, Serggggg. |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Люди, подскажите плизззз! Целый день с этой проблемой воюю. Неужели никто с таким не сталкивался?
--------------------
C уважением, Serggggg. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Ты просто сделал Lookup поле в наборе данных.
Если хочешь, чтобы выпадал список в DBGrid, то необходимо заполнить свойство PickList необходимого столбца DBGrid. -------------------- |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
А этот PickList надо заполнять, присваивая строкам поля запроса?
Типа такого? Grid1.Columns[j].PickList.Clear; for i:=0 to Query1.RecordCount do Grid1.Columns[j].PickList.Items.Add(Query1.Fields[k].Text); --------------------
C уважением, Serggggg. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
Serggggg, покажи код конструктора.
Pegas, пиклист не используется для лукапов, а для заполнения поля одним из предопределённых значений. он всё правильно делает, стандартное lookup-поле в наборе данных в редактируемом гриде будет выпадающим списком. фишка видимо в том, что поле создаётся динамически, а список значений для лукапа не формируется. можно жёстко прописать заполнение LookupList'а (со включенным кэшированием, разумеется), тогда всё будет хорошо и к тому же производительность возрастает на порядок, т.к. значения берутся не из базы, но скорее всего, это решается и стандартно. прото надо посмотреть на код. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Да точно, что-то я запарился....
-------------------- |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Привожу всё, что касается моего случая:
Grid: 6 полей для ввода. Из них 1 поле содержит Foreign Key (ID из другой таблицы) - оно и должно выпадать. Grid связан DataSet'ом с запросом (TQuery - назовём его Query1). Ещё один запрос представляет данные для LookUp'a (тоже TQuery - Query2). Query1: выбирает данные по условию. Для него SQL.Text присваивается по ходу выполнения программы. Запрос имеет параметр RequestLive=True (для добавления и редактирования данных в Grid'e). Query2: SQL.Text='SELECT field_ID, field_NAME from TableName1' на протяжении работы приложения (не меняется). Поля запроса Query1 (жестко прописанные в редакторе полей): 1. поле ID ... (поля ввода обычных числовых данных - 5 полей) 7. поле, содержащее Foreign Key (должно выпадать) Параметры инспектора объектов для поля#7: FieldKind: fkLookup FieldName: NVL_SIZE_ID KeyFields: NVL_SIZE_ID LookupDataSet: Query2 LookupKeyField: NVLSIZE_ID Lookup ResultField: VNAME Остальные параметры - по умолчанию. Колонки Grid'a: ... 5 полей с числовой информацией (FieldName1,...,FieldName5), поле с "выпадающим списком" (ButtonStyle = cbsAuto, Expanded заклинило на False, ReadOnly = True). Результат - во время работы программы оба запроса активны, Grid заполнен, но поле с Lookup'ом не реагирует на ввод (курсор там мигает, но на нажатие клавиш не реагирует). А просто ведёт себя, как поле ввода, в которое ничего ввести нельзя. --------------------
C уважением, Serggggg. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
неправильно. концептуально неправильно. выпадать должно поле NAME для поля KEY из другой таблицы. смысл лукапа в том, что ты выбираешь не само значение, а связанное с ним поле. т.е. тебе надо в грид подсовывать не KEY, а NAME. и изменение этого name будет автоматом менять значение FOREIGN KEY. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
Хорошо, меняю полю ID в конструкторе запроса значение FieldKind на fkData, добавляю новое поле VNAME:
FieldKind: fkLookup KeyFields: NVL_SIZE_ID (т.е. в конструкторе полей запроса есть и поле NVL_SIZE_ID, и поле VNAME) LookupDataSet: Query2 LookupKeyField: NVLSIZE_ID (это поле из запроса Query2) LookupResultField: VNAME (тоже из Query2) Из Grid'a убираем NVL_SIZE_ID, на место этой колонки ставим VNAME. Результат тот же. Или же мне надо запрос для самого Grid'a переделать, чтобы там отображалось VNAME? Извините, я задолбал, наверное, уже. Но мне очень надо в этом разобраться. --------------------
C уважением, Serggggg. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
ты проверил, другие поля редактируются?
допустим, есть два разных таблицы: Query1, Query2. Query1 ID1 // ключевое ID2 // foreign key NAME1 // имя Query2 ID2 // ключевое NAME2 // имя все поля объявляем статически (т.е. делаем Add в Fields Editor'е для обоих запросов). после этого там же, в Fields Editor'e, для Query1 опять делаем Add, выбираем тип строки - fkLookup, тип данных - соответствующий Query2.NAME2, далее: LookupDataSet = Query2, KeyFields = Query1.ID2, LookupKeyField = Query2.ID2 LookupResultField = Query2.NAME2 после этого, если сами запросы допускают редактирование, в DBGrid'е, связанном с Query1 ты сможешь изменить значение ID2, выбирая значения NAME2 из Query2. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Serggggg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 12.12.2003 Где: Донецк, Украина Репутация: нет Всего: нет |
x77, ОГРОМНОЕ СПАСИБО за детальное разъяснение! Всё заработало!
Фишка была также и в этом - свойство ReadOnly было равно true. Ещё раз спасибо! --------------------
C уважением, Serggggg. |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |