Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как: combo + значения из нескольких колонок таблицы? / 7 сообщений из 7, страница 1 из 1
17.08.2009, 12:22
    #36147345
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
Привет!
Вопрос собственно в том, как получать из комбо, в котором таблица, значения из нескольких полей/колонок этой таблицы?
Т.е. я сделал основным поле ID и указал на него через BoundCoulmn. Таким образом я могу получить ID через combo.Value, могу ненужное мне наименование позиции получить через combo.DisplayValue. Но мне по ходу нужны еще значения из друг(ой)(их) колон(ки)(ок), котоых не видно и не должно быть видно.
В данный момент приходццо привязываццо к наименованию таблицы в комбо и брать значение из нее, т.е. table.Field. Так я сейчас и поступаю, но сия идея мне шибко не нравиццо.

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

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

вфп90
...
Рейтинг: 0 / 0
17.08.2009, 14:36
    #36147845
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
я делаю так (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
...
Рейтинг: 0 / 0
17.08.2009, 14:41
    #36147863
Fffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
Сделал свой собственный комбо на основе грида и радуюсь жизни.
...
Рейтинг: 0 / 0
17.08.2009, 23:01
    #36148865
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
не, Вы не поняли ни разу. Как сделать несколько колонок в комбо и спрятать ту, что с ID - я знаю. Как получить значения остальных колонок, которые есть в таблице, из которой наполняется комбо, но которые в наполнении комбо не участвуют - вот в чем проблема.
Ну, к примеру, список клиентов: есть его CustID и наименование CustName. Тут ясно, делаем 2 колонки, в комбо выводим CustName, а Value в комбо будет браться из CustID. А теперь берем еще одну колонку - пользуется ли клиент дисконтом - CustUseDiscount и/или еще что угодно, типа CustGroupID какой-то там группы, значение которой определяет дальнейшее поведение формы.
...
Рейтинг: 0 / 0
17.08.2009, 23:51
    #36148894
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
Зачем из Combo-то брать? Идентификатор записи получили, выполняете поиск в таблице по идентификатору и берете любое поле. Не важно, есть оно в Combo или нет.

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

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

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  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. Существует метод, который конвертирует значение идентификатора в значение индекса. Тогда определение значение столбца выбранного элемента будет выглядеть так

Код: plaintext
1.
2.
3.
4.
5.
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 )
...
Рейтинг: 0 / 0
17.08.2009, 23:54
    #36148896
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
Забыл, что можно сразу индекс выбранного элемента прочитать

Код: plaintext
1.
2.
3.
4.
lnListIndex = ThisForm.MyCombo.ListIndex
?ThisForm.MyCombo.List(m.lnListIndex,  1 )
?ThisForm.MyCombo.List(m.lnListIndex,  2 )
?ThisForm.MyCombo.List(m.lnListIndex,  3 )
...
Рейтинг: 0 / 0
18.08.2009, 11:19
    #36149414
CTAC-KO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как: combo + значения из нескольких колонок таблицы?
ага, то есть практически можно задать необходимые столбцы в комбо, задать им ширину 0 чтобы видно не было и таким вот образом получать из них значения? Только одно но - они все будут строкового типа, что несовсем удобно.
в любом случае - спасибо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как: combo + значения из нескольких колонок таблицы? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]