![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление информации в RXLookupCombo
Vladimir Bolotin © (2003-07-16 20:59:00)
Использую компонент RXLookupCombo из библиотеки RxLib для выбора значения из справочника. В свойствах Lookup* делаю ссылку на соответствующий DataSet и поля. DataSource у меня пустой, т.к. выбранное значение справочника беру напрямую из текущей записи DataSet"a.
Вопрос: как сделать, чтобы при открытии формы редактирования RXLookupCombo отображал желаемую запись из справочника? У меня он постоянно "сброшен".
Eduard Karabovich (2003-08-07 01:44:00) [1]
Я делал следующим образом - в DataSet создавал LookUp поле (field), где указывал - LookupDataset (справочник), LookupKeyField (Id в текущем DS)LookupResultField (Name результирующее поле из справочника). В LookupCombo - ListSource (справочник) FieldName (имя созданного лукап поля). Все работает - в текущем датасете меняется ID или код при выборе другого значения в лукапе и высвечивается в других записях наименование из справочника нужное, и в гриде можно использовать (в DBGridEh тоже появляется лукап на нужном поле). База - FB-1
HSolo (2003-08-06 09:55:00) [2]Делали, конечно :)
Вариант 1 - вообще без lookup-а. По нажатию кнопки / hotkey вызывается форма для работы со справочником. С добавлением / коррекцией, с поиском, сортировкой и прочими наворотами. У этой формы есть свойство RecordChosen для ID выбранной записи. Выбор записи - кнопка ОК / hotkey / DoubleClick, по вкусу; обработчик выглядит примерно так:
RecordChosen := SpravochnikDataSet.FieldByName("RecordID").AsInteger;
ModalResult := mrOK;
Код вызова примерно такой:
with TfSpravochnik.Create(nil) do
try
if ShowModal = mrOK then
<Ваш-параметр> := RecordChosen;
finally
Free;
( если все же хочется lookup)Делали, конечно :)
Вариант 1 - вообще без lookup-а. По нажатию кнопки / hotkey вызывается форма для работы со справочником. С добавлением / коррекцией, с поиском, сортировкой и прочими наворотами. У этой формы есть свойство RecordChosen для ID выбранной записи. Выбор записи - кнопка ОК / hotkey / DoubleClick, по вкусу; обработчик выглядит примерно так:
RecordChosen := SpravochnikDataSet.FieldByName("RecordID").AsInteger;
ModalResult := mrOK;
Код вызова примерно такой:
with TfSpravochnik.Create(nil) do
try
if ShowModal = mrOK then
<Ваш-параметр> := RecordChosen;
finally
Free;
end;
Вариант 2 (если все же хочется lookup): киньте на форму RxMemoryData, сотворите там поле для ID выбираемой записи, прицепите к DataSource, и в DataSource / DataField укажите этот самый DataSource и это самое поле. Перед открытием Вашего TQuery сделайте:
with MemoryData do begin
Open;
Append;
end;
И теперь в MemoryData.то-самое-поле будет сидеть ID выбраной записи.
Vladimir Bolotin (2003-08-05 22:17:00) [3]
К сожалению эти события не помогут.. =(
Дело не в этом..
Эх.. ну неужели никто не делал форуму редактирования записи с выбором значения из справочника в клиент/серверной системе? Это же основы..
Расскажите просто как у вас сделано, что в каких свойствах..
Vovchik_A (2003-08-05 21:30:00) [4]
Ну может тебе OnChange или OnDataChange надо обработать ? Подумай...
Vladimir Bolotin (2003-08-05 20:44:00) [5]
Ребята.. :-)
Вероятно все уже запутались в чем проблема. Где эти поля использовать? :-)
Объясню попроще.
Есть набор данных, полученный через TQuery (содержащий два поля справочника: code, name). Есть компонент RXLookupCombo где в LookupDataSet указан этот самый TQuery, а в LookupField некоторое поле, например name.
Проблема в том, что при выборе некоторого значения через RXLookupCombo текущая запись набора данных изменяется (тут все верно), а вот при изменении текущей записи другим способом(переход на другую запись справочника) компонент не отображает этого изменения и, более того, при щелчке на нем мышкой переходит на ту запись, которая была выбрана при помощи комбобокса последней.
stud (2003-08-04 09:22:00) [6]
так TQuery после открытия возвращает набор данных с именами полей. вот их и используй
Vladimir Bolotin (2003-08-03 23:01:00) [7]
так система клиент-сервер..
в DataField-то нечего указывать.. все обновления ведуться через TQuery.
ЮЮ (2003-07-24 02:46:00) [8]
Блин, нельзя же так противоречиво об одном и том же! :-)
Если это редактируется/отображается поле записи, то DataSet b DataField, естественно, необходимо заполнитьсоответственно
Vladimir Bolotin (2003-07-24 00:08:00) [9]
"С другой стороны, "как сделать, чтобы при открытии формы редактирования RXLookupCombo отображал желаемую запись из справочника? ". А желаемая запись никак не связана с редактируемой строкой?"
Связана. Редактируемая строка содержит код, описание которого (из справочника) и долно отображаться в RXLookupCombo. Изменение текущей записи в справочнике ни к чему почему-то не приводит.. :\\
ЮЮ (2003-07-23 03:01:00) [10]
В этом случаае (22.07.03 21:53) их и впрямь можно не заполнять. К такому совету привели твои расплывчаты фразы, типа "выбранное значение справочника беру напрямую из текущей записи DataSet", хотя в таком варианте правильнее использовать RXLookupCombo.Value/KeyValue и, соответственно, чтобы в нём уже стояла какая-нибудь строка из справочника надо задать RXLookupCombo.Value/KeyValue/DisplayValue.
С другой стороны, "как сделать, чтобы при открытии формы редактирования RXLookupCombo отображал желаемую запись из справочника? ". А желаемая запись никак не связана с редактируемой строкой?
Vladimir Bolotin (2003-07-22 21:53:00) [11]
что писать в DataSource и DataField?
RXLookupCombo используется для выбора значения из справочника и передачи его в TQuery вкачестве параметра запроса.
Насколько я знаю такой способ передачи параметров (через DataSource/DataField) отсутствует..
Johnmen (2003-07-16 21:45:00) [12]
В обязательном порядке прописать DataSource и DataField.
Иначе, скорее всего, компонент используется не по "назначению".
Принудительно выставить значение - KeyValue:=<<значение ключа>>