:: Visual Foxpro, Foxpro for DOS
проблема с ComboBox
Nick
Автор

Сообщений: 140
Откуда: Lvov
Дата регистрации: 11.01.2001
Всем привет
давно не писал
Попросили в проект добавить Классификатор профессий

база профессий
master.code n(3)
master.name c(40)

основная база куда заносится значение с базы master
base.posada n(3)

В Data Envirom...
есть обе базы

Добавил ComboBox - через билдер указал все параметры
ControlSource - base.posada
RowSource - master.code,name
RowSource
Type - 6 - fields

На валид повесил код

ThisForm.LblPosada2.Caption=IIF(SEEK(posada,'master'),ALLTRIM(MASTER.NAME),'*')
ThisForm.Refresh

И эта падла вносит в base.posada номер записи в базе master ,а не значение master.Code
Если руками в базе вбить код профессии - то нормально отображает

есть старый проект - такихй же комбо 20 штук - все ок

Где трабл ??




Исправлено 2 раз(а). Последнее : Nick, 23.07.21 12:28
Ratings: 0 negative/0 positive
Re: проблема с ComboBox
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
Если код - это поле числового типа, то надо добавить настройку

ComboBox.BoundTo = .T.

Но в этом случае возможны некие глюки, если этот Combo внутри Grid
Ratings: 0 negative/0 positive
Re: проблема с ComboBox
Nick
Автор

Сообщений: 140
Откуда: Lvov
Дата регистрации: 11.01.2001
СПАСИБО!
Добавил на комбо BoundTo = .T.
заработало!

Зато второй комбо с подразделениями - не работает - хотя идентичен первому
И Добавлял на комбо BoundTo = .T.


БЛИН! Открываю другие проекты - все работает без ComboBox.BoundTo = .T.
Все поля числового типа!

Есть какой то сцуко нюанс!
Ratings: 0 negative/0 positive
Re: проблема с ComboBox
Владимир Максимов

Сообщений: 14100
Откуда: Москва
Дата регистрации: 02.09.2000
То, что отображается в раскрывающемся списке ComboBox - это отдельный список. Причем все (т.е. вообще все) значения в этом раскрывающемся списке только и исключительно символьного типа и никак иначе. Если источником какого-то столбца, например, является число, то в раскрывающемся списке это будет уже текст, сформированный из этого числа

Выбранное значение в этом списке может быть идентифицировано двумя способами

1. Как порядковый номер строки в этом выпадающем списке (число)
2. Как значение, прочитанное из столбца, номер которого указан в свойстве BoundColumn. Точнее, из этого столбца будет взято значение для заполнения свойства Value

Куда выбранное значение записать определяется значением реквизита ControlSource. И вот тут вступает в действие некий автоматизм.

Если ControlSource - это числовое значение, то в качестве выбранного значения элемента списка будет взят порядковый номер элемента в списке. Число же!
Если ControlSource - это символьное значение, то в качестве выбранного значения элемента списка будет взято значение из BoundColumn. Т.е. значение Value

Однако поскольку идентификатор записи зачастую - это числовое поле, то ввели дополнительное свойство BoundTo при установке которого в значение .T. вне зависимости от типа данных в ControlSource выбранное значение будет взято из BoundColumn, а затем это символьное значение будет конвертировано в тот тип данных, который указан в ControlSource

Нужен ли BoundTo = .T. ? Так смотрите, нет ли у Вас совпадения кода и порядкового номера. Может, просто не было необходимости их различать?


Но, разумеется, весь этот автоматизм может быть вообще выброшен и организован "закат солнца вручную". Т.е. чистым программированием определяют выбранное значение и в коде записывают куда надо
Ratings: 0 negative/3 positive
Re: проблема с ComboBox
Nick
Автор

Сообщений: 140
Откуда: Lvov
Дата регистрации: 11.01.2001
Спасибо Владимир ,все понятно обьяснили!
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 33 (Гостей: 33)

© 2000-2024 Fox Club 
Яндекс.Метрика