Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Как: combo + значения из нескольких колонок таблицы?  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
Привет!
Вопрос собственно в том, как получать из комбо, в котором таблица, значения из нескольких полей/колонок этой таблицы?
Т.е. я сделал основным поле ID и указал на него через BoundCoulmn. Таким образом я могу получить ID через combo.Value, могу ненужное мне наименование позиции получить через combo.DisplayValue. Но мне по ходу нужны еще значения из друг(ой)(их) колон(ки)(ок), котоых не видно и не должно быть видно.
В данный момент приходццо привязываццо к наименованию таблицы в комбо и брать значение из нее, т.е. table.Field. Так я сейчас и поступаю, но сия идея мне шибко не нравиццо.

Альтернатива мне представляется так: сначала придется в методе combo.Init создать путем combo.AddProperty доп. свойства (если одно - можно заюзать combo.tag), а в методе combo.InteractiveChange опять же через ссылку table.Field эти свойства заполнять. Причем неудобство состоит в том, что в комбо нет свойства RowSourceTable, т.е. по ходу и его желательно создать на ините, чтобы потом через него на таблицу ссылаццо, чтобы в итоге избежать указания прямого именования используемой в комбо таблицы...

А как это можно реализовать еще по-другому?

вфп90
17 авг 09, 12:22    [7545674]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
Погодин
Member

Откуда:
Сообщений: 117
я делаю так (1 поле - id, 2-е - наименование)

.RowSource='tablica.tabl_name,tabl_id'
.ColumnWidths='350,0'
.ColumnLines=.f.
.ColumnCount=2
.ColumnLines=.f.
.BoundColumn=2
.ControlSource='m.myvar'

если полей больше, то делаю .ColumnCount=n и .ColumnLines=.t., а колонку с id помещаю между какими нибудь другими колонками и ширину это колонке даю 0
17 авг 09, 14:36    [7546603]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
Fffffffffffffff
Guest
Сделал свой собственный комбо на основе грида и радуюсь жизни.
17 авг 09, 14:41    [7546650]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
не, Вы не поняли ни разу. Как сделать несколько колонок в комбо и спрятать ту, что с ID - я знаю. Как получить значения остальных колонок, которые есть в таблице, из которой наполняется комбо, но которые в наполнении комбо не участвуют - вот в чем проблема.
Ну, к примеру, список клиентов: есть его CustID и наименование CustName. Тут ясно, делаем 2 колонки, в комбо выводим CustName, а Value в комбо будет браться из CustID. А теперь берем еще одну колонку - пользуется ли клиент дисконтом - CustUseDiscount и/или еще что угодно, типа CustGroupID какой-то там группы, значение которой определяет дальнейшее поведение формы.
17 авг 09, 23:01    [7548909]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Зачем из Combo-то брать? Идентификатор записи получили, выполняете поиск в таблице по идентификатору и берете любое поле. Не важно, есть оно в Combo или нет.

При этом, если источник данных для ComboBox - это таблица или поля таблицы, то факт выбора автоматически устанавливает указатель записи на соответствующую запись.

Ну, а если хочется прочитать напрямую из раскрывающегося списка, то содержимое этого списка - это специфический массив, записанный в свойстве с именем List. Обращение к элементам этого массива происходит следующим образом

ThisForm.MyCombo.List(строка, столбец)

Весь вопрос в том, как получить номер (индекс) строки. Повторюсь, если источник данных - это таблица, то подобный поиск не имеет смысла. Хотя, в общем случае, поиск выполняется следующим образом

  FOR nCnt = 1 TO ThisForm.MyCombo.ListCount

      IF ThisForm.MyCombo.Selected(nCnt)  && Is item selected?

         ? SPACE(5) + ThisForm.MyCombo.List(nCnt, 1) && Show item

      ENDIF

   ENDFOR

Т.е. банальный перебор ВСЕХ элементов, пока не найдем тот, который выбран. Тут следует иметь в виду, что свойство List ну очень специфическое. Т.е. попытка выполнить поиск через ASCAN() - выдаст сообщение об ошибке о том, что List - не массив.

Однако можно сразу определить выбранную строку списка через ее идентификатор. Это свойство Combo.ListItemId. Существует метод, который конвертирует значение идентификатора в значение индекса. Тогда определение значение столбца выбранного элемента будет выглядеть так

lnListID = ThisForm.MyCombo.ListItemId
lnListIndex = ThisForm.MyCombo.ItemIdToIndex(m.lnListID)
?ThisForm.MyCombo.List(m.lnListIndex, 1)
?ThisForm.MyCombo.List(m.lnListIndex, 2)
?ThisForm.MyCombo.List(m.lnListIndex, 3)
17 авг 09, 23:51    [7548982]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Забыл, что можно сразу индекс выбранного элемента прочитать

lnListIndex = ThisForm.MyCombo.ListIndex
?ThisForm.MyCombo.List(m.lnListIndex, 1)
?ThisForm.MyCombo.List(m.lnListIndex, 2)
?ThisForm.MyCombo.List(m.lnListIndex, 3)
17 авг 09, 23:54    [7548991]     Ответить | Цитировать Сообщить модератору
 Re: Как: combo + значения из нескольких колонок таблицы?  [new]
CTAC-KO
Member

Откуда: Украина, г. Ивано-Франковск
Сообщений: 1012
ага, то есть практически можно задать необходимые столбцы в комбо, задать им ширину 0 чтобы видно не было и таким вот образом получать из них значения? Только одно но - они все будут строкового типа, что несовсем удобно.
в любом случае - спасибо!
18 авг 09, 11:19    [7550131]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить