|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с динамическим обновлением PickList в DBGrid!
Здравствуйте, уважаемые форумчане и все любители Delphi!
Давно не программировал на Delphi 7 и в связи с этим позабыл многое из того, что делал раньше. Выручайте! Моя проблема. Есть у меня таблица Main (в главной форме компонент MainDBGrid), куда помещаются данные ежедневного отчета (тема - аттракционы, зоопарк, аквапарк). Есть три таблицы Park, Waterpark и Zoo, соответственно. В главной таблице есть два поля: Территориальность (maLocationOf)(комбобокс из трех записей, Парк, аквапарк и зоопарк) и Объект (maObject). Собственно проблема как раз с полем Объект. Мне необходимо в зависимости от того, какое значение стоит в поле Территориальность для ТЕКУЩЕЙ записи в DGBrid'e сформировать список значений из определенной таблицы в PickList (одной из трех) ТОЛЬКО для данной записи. Так если надо изменить значение поля Территориальность, например, выбрать не Парк, а Зоопарк, то при изменении в поле Объект соответственно сразу бы формировался новый PickList из другой таблицы (Zoo, соответственно). Не пойму какое событие мне нужно. Пробовал и OnColEnter и OnEnter, OnCellClick в DBGrid и AfterScroll в ADOTable но результат двоякий. Работает криво, при переключении на другое поле список пропадает. Lookup поля по-моему, так вот динамически формировать нельзя? или это как-то с помощью ADOQuery можно сделать? Подскажите, как сделать точно и правильно, чтобы работало, как мне надо? Прикладываю программу в архиве и БД. Очень хотелось бы с этим разобраться. |
#2
|
|||
|
|||
Беда вашего метода в том, что какое бы событие не использовалось (забыли еще про OnColExit - единственно возможное в этом случае событие), не поможет ничто.
Потому как при непосредственном редактировании в гриде этот прием работает не корректно. Факт: ввели данные в новую строку. "Парк" в территориальности и "Тир" в колонке Объект, затем вновь перешли на эту строку, выбрали в локализации "Аквапарк" и перешли на другую строку. Вопрос что осталось в колонке "Объект"? Правильно, нужен еще один геморрой для проверки правильности ввода (который как раз и может делаться в событии AfterScroll, но, к сожалению, не только в нем). Если бы добавление и редактирование происходило в отдельных компонентах ввода а запись в таблицу БД после того как введенные данные проверены, проблемы можно было бы избежать. |
#3
|
|||
|
|||
СПАСИБО!!!
Цитата:
Большое спасибо Вам!! Вы кажется натолкнули меня на до того не приходившую мне в голову мысль, что можно ведь передать значения ячеек грида отдельным компонентам и непосредственно до сохранения записи оперировать ими! Но здесь опять же как СВОЕВРЕМЕННО передавать компонентам текущие значения ячеек грида и, таким образом, СВОЕВРЕМЕННО же обеспечить реагирование на некорректность введенной информации... вот вопрос. |
#4
|
|||
|
|||
Наверное для начинающих это действительно проблемная тема, но более или менее знакомого с разработкой БД - добавление и редактирование в отдельных компонентах общее место.
Только так и делают. Насчет своевременности можно не беспокоится. Передавать компонентам значения из строк набора данных занятие простое. А проверка на корректность ввода делается перед тем как записывают данные, а запись эта осуществляется либо в процедуре события OnClick кнопки (назовем ее "Сохранить") или, если редактирование происходит в отдельной форме, в процедуре события OnClose формы. Это как правило. В прицепе учебный пример такого приложения, где добавление и редактирование осуществляется в другой форме. |
#5
|
|||
|
|||
Цитата:
Спасибо, пример интересный! Однако мне нужно немного не это. Мне необходимо, чтобы данные вводились именно через таблицу и в таблице же при изменении одного из полей (Парк, Аквапарк или Зоопарк) динамически изменялось бы другое поле в таблице - т.е. другие данные загружались бы как в комбо в то поле (если парк - аттракционы, аквапарк - горки и т.д.). Как реализовать именно такое?... Может какое-то событие для этого можно организовать? |
#6
|
|||
|
|||
Lookup поля
А кто может подсказать мне как организовать Lookup поле для любого столбца DBGrid'a моей БД, например, сделать столбец maSupport Lookup'овским без использования PickList? Читал в разных источниках, как это делается, делаю все по инструкции, но поле не становится полем Combo, т.е. в нем по-прежнему нет выпадающего списка.
|
#7
|
|||
|
|||
Спасибо!
Vocabulary, спасибо за помощь! Вопрос решил несложным алгоритмом с добавлением дополнительной переменной. Проблема-то детская, эх, многое позабыл за столько лет.
Тема может быть закрыта. |