Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Combobox возвращает не тот тип  [new]
faustgreen
Member

Откуда:
Сообщений: 325
На форме есть комбобокс, метод init формы:

SELECT name, id FROM table INTO CURSOR curResult (ID - numeric)

thisform.combo1.RowSourceType = 2 (Alias)
thisform.combo1.RowSource = "curResult"

do case 
   case lcMode = "NEW"

   case lcMode = "EDIT"
      thisform.combo1.value = 1
endcase


Свойства combo1:
   boundColumn = 2
   boundTo = .T.


Если после запуска формы выбрать произвольное значение в combo1, то команда
messagebox(vartype(thisform.combo1.value)) 
вернет "C" для случая с новой записью и "N" для случая редактирования. Почему не "N" в обоих случаях ?
9 янв 19, 10:38    [21780321]     Ответить | Цитировать Сообщить модератору
 Re: Combobox возвращает не тот тип  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1427
faustgreen
На форме есть комбобокс, метод init формы:

SELECT name, id FROM table INTO CURSOR curResult (ID - numeric)

thisform.combo1.RowSourceType = 2 (Alias)
thisform.combo1.RowSource = "curResult"

do case 
   case lcMode = "NEW"

   case lcMode = "EDIT"
      thisform.combo1.value = 1
endcase


Свойства combo1:
   boundColumn = 2
   boundTo = .T.


Если после запуска формы выбрать произвольное значение в combo1, то команда
messagebox(vartype(thisform.combo1.value)) 
вернет "C" для случая с новой записью и "N" для случая редактирования. Почему не "N" в обоих случаях ?
Потому, что никто. похоже, не потревожился об инициализации значением нужного типа в первом случае. В отличие от второго случая.
9 янв 19, 11:37    [21780382]     Ответить | Цитировать Сообщить модератору
 Re: Combobox возвращает не тот тип  [new]
faustgreen
Member

Откуда:
Сообщений: 325
Sergey Sizov,
thisform.combo1.value = 0
решило проблему, просто думал, что Fox сам догадается о типе поля исходя из настроек.
9 янв 19, 11:57    [21780402]     Ответить | Цитировать Сообщить модератору
 Re: Combobox возвращает не тот тип  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1427
faustgreen
Sergey Sizov,
thisform.combo1.value = 0
решило проблему, просто думал, что Fox сам догадается о типе поля исходя из настроек.
Каких настроек? Вы где-то как-то указали ему числовой тип данных?
9 янв 19, 14:06    [21780558]     Ответить | Цитировать Сообщить модератору
 Re: Combobox возвращает не тот тип  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7832
faustgreen
просто думал, что Fox сам догадается о типе поля исходя из настроек.


Для объектов FoxPro тип данных задается или по типу поля, указанному в свойстве Object.ControlSource или, если это свойство не указано, явным образом в свойстве Object.Value. Если ни того, ни другого не указано, то тип данных объекта будет использован по умолчанию.

Для ComboBox тип данных по умолчанию - это символьный тип данных

Для понимания

Выпадающий список содержит в себе только и исключительно символьные данные. Вне зависимости от типа полей таблицы-источника. При формировании выпадающего списка данные будут автоматически конвертированы в символьный тип

При выборе элемента списка в качестве выбранного значения может быть взято

1. Значение столбца, порядковый номер которого указан в BoundColumn
2. Порядковый номер "строки" в выпадающем списке

По умолчанию, если ComboBox.Value символьного типа, то в качестве выбранного значения берется значение столбца, если ComboBox.Value числового типа, то в качестве выбранного значения берется порядковый номер строки

Свойство BoundTo = .T. говорит о том, что в любом случае следует взять значение столбца. Даже если ComboBox.Value - числового типа

Если взято значение столбца и ComboBox.Value числового типа, то при сохранении выбранного значения произойдет обратная конвертация из символьного типа данных в выпадающем списке в числовой тип

---------------------

Это все к тому, что с ComboBox надо быть осторожным. Результат может оказаться отличным от ожидаемого.
9 янв 19, 21:34    [21781050]     Ответить | Цитировать Сообщить модератору
 Re: Combobox возвращает не тот тип  [new]
faustgreen
Member

Откуда:
Сообщений: 325
ВладимирМ, спасибо за развернутый ответ. Некоторых вещей не знал:

автор
По умолчанию, если ComboBox.Value символьного типа, то в качестве выбранного значения берется значение столбца, если ComboBox.Value числового типа, то в качестве выбранного значения берется порядковый номер строки


Думал, что свойство BoundTo отвечает за то, что будет взято за возвращаемое значение - номер строки или значение столбца.
9 янв 19, 23:01    [21781097]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить