![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование не DB компонента на DBCtrlGrid. [D7, MySQL]
Fedia © (2005-09-18 05:32:00)Доброго времени суток !
В БД находится справочник ves с полями id_ves (тип int(11)) и ves (тип Char(40)). Так же в БД имеется множество таблиц, содержащих поле id_ves. Необходимо организовать визуальный интерфейс для удобного заполнения поля id_ves в данных таблицах. Для этого я предполагаю использовать компонент DBCtrlGrid, на который будут помещены компоненты DBEdit и ComboBox. При нажатии на кнопку ComboBox-са должен появляться выпадающий список, в котором должны отображаться записи таблицы ves, в следующем виде: “id_ves + пробел + ves”. Пользователь выбирает из выпадающего списка нужную запись, после чего в компонент DBEdit заносится значение поля id_ves, а в компонент ComboBox – поля ves. Но в описанной выше компонентной связке существует один дефект, который я не могу устранить: значение свойства ComboBox.Text отображается только для текущей записи таблицы, отображаемой на DBCtrlGrid, в остальных оно отображается пустым. Вот с этой проблемой я прошу помочь мне справиться.
Сразу отмечу, что при использовании компонента DBComboBox такая схема работает, но для ее реализации в заполняемой таблице необходимо добавлять еще одно физическое поле ves, что крайне не желательно.
С уважением,
Федор.
Fedia (2005-09-19 23:31:00) [21]>DBLookupComboBox делает то, что тебе нужно.
1. При помещении этого компонента на TDBCtrlGrid даже его свойство ListSourсe нельзя задать, т.к. при попытке это сделать TDBCtrlGrid сразу выдает сообщение: "Operation not allowed in a DBCtrlGrid".
2. Также как и в DBComboBox, для изменения содержимого окна DBLookupComboBox необходимо, чтобы этот компонент был связан с реально существующим полем таблицы БД.
ANB (2005-09-19 10:31:00) [22]DBLookupComboBox делает то, что тебе нужно.
Fedia (2005-09-19 05:34:00) [23]Поправка:
ControlStyle := ControlStyle + [csReplicatable];
Fedia (2005-09-19 05:28:00) [24]Попытаюсь уточнить вопрос.
У меня имеются два варианта для реализации описанного выше интерфейса. Может быть, кто-то сможет предложить другие варианты.
I. Использовать TComboBox. В этом случае значение ComboBox.text отображается только в текущей записи набора данных, а мне необходимо, чтобы это свойство отображалось у всех видимых на DBCtrlGrid записях таблицы. Причем значение этого свойства может быть различным, в зависимости от содержимого компонента DBEdit.
Я понимаю, что без изменения компонента TComboBox здесь не обойтись, но мне нужно знать хотя бы направление, в котором следует копать.
К примеру: 1. В конструкторе компонента TEdit прописываем:
ControlStyle := ControlStyle + csReplicatable;;
2. Подключаем DBCtrlGrid к набору данных;
3. Помещаем TEdit на DBCtrlGrid. Вопрос: Что нужно сотворить с компонентом TEdit (или TComboBox), чтобы значение свойства text отображалось в каждой строке DBCtrlGrid.
II. Использовать TDBComboBox. В этом случае проблем с отображением данных нет. Но для корректной работы с содержимым окна компонента TDBComboBox необходимо, чтобы компонент был связан с полем таблицы БД. Использовать в данном случае вычисляемое поле fkCalculated не получается, поскольку возникает запрет на редактирование содержимого TDBComboBox. Добавлять же в таблицу базы данных еще одно поле, ради реализации пользовательского интерфейса не целесообразно. Может быть имеется возможность “подсунуть” компоненту TDBComboBox какое-либо виртуальное поле (т.е. не находящееся в таблице БД), так, чтобы сохранилась возможно редактирования содержимого компонента TDBComboBox?
И в еще один вопрос. При работе с TDBCtrlGrid пока у меня пока глюков не возникало, но ходят слухи, что этот компонент не надежный и начиная с n-й версии Delphi не поддерживается разработчиками. Это правда?
Надеюсь, что на этот раз, у меня получилось понятно изложить вопрос :)