отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Анонимный пользователь Автор |
Пятый час кряду мучаюсь...
Есть комбо, который сидит на крусоре curEntHeads. В комбе отображаются 3 столбца (по факту 2, первый 0-длины). Егойные свойства: ColumnCount = 2 DisplayValue = "=peopl_snam" (без скобок) RowSource = curEntHeads RowSourceType = 2 В курсоре три поля, нужно, чтобы Value комбы моталось по первому полю, но после выбора в нем отображалось значение второго поля. Все делаю по МСДНу: в InteractiveChange комбы прописываю This.DisplayValue = This.List(This.ListIndex,2) Получается следующее: по чейнджу до строки с изменой DisplayValue = значению первого столбца (скрытого, 0-ширины), Value - то же самое. После обновления DisplayValue вышеуказаной строкой DisplayValue становится нужного значения (значения второго столбца), а Value пугается и становится "". Самое веселое - то же самое пустое значение отображается в едите комбы! Помогите люди добрые - кто как думает, где собака порылась? |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
Если на курсоре, то настройка комбо должна быть примерно такой:
|
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Анонимный пользователь Автор |
Спасибо, конечно... все равно нифига не работает!
А зачем вот это RowSource = "curEntHeads.displayfield1,displayfield2, boundedfield" если комба и так берет три столбца? Разве ColumnCount = 3 не достаточно? И еще почему RowSourceType = 6 - Filds, если мне нужен алиас? Какая особая разница? Все это перепробовал... не-а! |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
Вот рабочий пример:
|
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Анонимный пользователь Автор |
Гм!..
Я понимаю, что пример работает... Но зачем мне нужен дополнительный Lable на форме, если там и так места нет?Мне нужно выводить значение в Edit Cobobox-а... Может, есть еще какие идеи? |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Заметно , поскольку практически ничего не понял из пояснения. Поэтому просто несколько замечаний к сведению. Значение Value присваивается (выбирается) из того столбца, который указан в свойстве BoundColumn. Это порядковый номер из RowSource. Содержимое DisplayValue присваивается (выбирается) всегда только и исключительно из первого столбца RowSource. У тебя есть курсор, содержащий 3 поля. Тебе нужно: Value выбирается по значению первого поля этого курсора, но само это первое поле не должно отображаться в выпадающем списке. Собственно выбор элемента визуально (DisplayValue) должен осуществляться по значению второго поля. 3 поле курсора - роли не играет и его можно не отображать. Поскольку надо отобразить поля не в "естесственной" последовательности, да и вообще не все поля курсора, то в качестве источника данных для ComboBox выбираем RowSourceType = 6 - Fields В списке полей на первом месте должно стоять то, что надо отображать как выбранный элемент (DisplayValue). В данном случае - это второе поле. Порядок следования остальных полей не важен. RowSource = "MyTable.Field2, Field1" Именно так, алиас таблицы указан только для первого поля Чтобы указать, что значение Value следует брать из второго поля, указанного в RowSource делаем настройку BoundColumn = 2 А чтобы это второе поле не отображалось в раскрывающемся списке устанавливаем его ширину равной нулю ColumnWidth = "100,0" Если ColumnCount осталось в значении по умолчанию (0), то ширину столбцов можно не указывать. Будет отображен только первый столбец с шириной равной ширине самого ComboBox. Если поле курсора, значение которого присваивается в Value (в данном случае Field1) имеет числовой тип данных, то следует сделать еще одну настройку BoundTo = .T. Отредактировано (13.05.05 12:20) ------------------ |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
AnatolyS Сообщений: 4565 Откуда: Санкт-Петербург Дата регистрации: 21.01.2002 |
Послушай, Label я привел исключительно для показа работоспособности комбо. В примере третий стоблец привязан к Value, а первый столбец к DisplayValue - так зачем еще какие-то манипуляции для переприсваивания DisplayValue и так уже содержащего выбранный объект?
Или ты хочешь, чтобы в DisplayValue отображалось содержимое второго столбца? Так это не возможно в принципе - DisplayValue всегда привязывается к первому столбцу. |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Анонимный пользователь Автор |
Владимир, !
Однозначно: вам уготовано писать бестеллер. Базиян с Пэддоком нервно курят в коридоре Великолепное объяснение, все вышло замечательно! Анатолий, вам тоже санкс - просто я без пояснений в вашем коде изюминку проглядел По ходу работы возник вопрос: а нельзя ли исхитриться и в значении Edit-а выодить строковую сумму двух столбцов курсора? У меня там как раз в одном имя, а в другом должность... |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Да запросто. Просто надо помнить о том, что в качестве DisplayValue всегда выводиться содержимое первого столбца RowSource. Значит надо просто сформировать этот первый столбец нужным нам образом, а если его отображение в выпадающем списке не нужно, то установить его ширину равную 0. ColumnWidth = "0,100,0" Однако для этого придется изменить тип источника данных (RowSourceType), поскольку непосредственно в таблице нужного нам значения нет, а написать функцию в качестве источника - не получится. Простейшее решение - это сделать выборку в курсор или массив, сформировав нужное значение первого столбца и использовать результат этой выборки в качестве источника данных для Combo. |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Burn Сообщений: 5644 Откуда: Днепр Дата регистрации: 02.01.2002 |
Цитата:А вот с этим не могу согласится - подобная конструкция вполнеработоспособна: RowSourceType=6 RowSource="Str(Val(dim.di),6,2)+Iif(Empty(Val(dim.dl)), '', 'x'+Str(Val(dim.dl),3)),cod" DIM это таблица с полями DI, DL, COD. Только у меня немного по другому - показываем мы первый столбец а в качксве VALUE - мне нужен второй Отредактировано (13.05.05 14:56) ------------------ В борьбе бобра с козлом побеждает бобро |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Владимир Максимов Сообщений: 14100 Откуда: Москва Дата регистрации: 02.09.2000 |
Цитата:Действительно. Когда проверял у себя просто забыл про пробелы, вот и не увидел, что tab.Field1+tab.Field2 дало результат. Просто "довесок" в виде tab.Field2 оказался вне области видимости после кучи концевых пробелов от tab.Field1 |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Анонимный пользователь Автор |
Burn, санкс!
Именно это мне и нужно было - переписывать курсор под 2 столбца вместо одного уж шибко напряжно - много где дальше в коде привязка к трем... Теперь все как у людей - "Пердседатель колхоза им. Мичурина Простокваша Н.П." |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Sandwich Сообщений: 137 Дата регистрации: 08.02.2014 |
Здравствуйте
Я тоже борюсь с поведением комбо ))) Задача: Сделать комбо, отображающий значения полей Name курсора shops, а при выборе значения присваивал переменной id этой записи. Сделал так:
Также для проверки рядом поставил text поле, у которого ControlSource то же pnCurrentShop В методе InteractiveChange комбо написал
Тестинг привел к 2-м вопросам: 1. При выборе мышкой значения в комбо его InteractiveChange не срабатывает: для просмотра нового значения приходится кликать на text1, чтобы он обновился 2. Пока переменная pnCurrentShop не была объявлена явно (только в визуальном построителе) все работало правильно (кроме п. 1). Когда в вызывающем эту форму prg я объявил её как PUBLIC, добавилась еще одна странность: при выборе значений из выпадающего списка, это новое значение не отображается в комбо (т.е. визуально в нем ничего не выбрано). Хотя text1 содержит "правильный" id. |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
AndyNigmatec Сообщений: 1574 Откуда: Волгоград Дата регистрации: 28.06.2015 |
Вот простой пример
в InteractiveChange видно: this.Value - как раз нужный id, присваивайте кому угодно this.DisplayValue - то что видно в комбо И, кстати, никаких public на мой взгляд не требуется - сделайте свойство формы/класса куда и присваивайте свой id Исправлено 2 раз(а). Последнее : AndyNigmatec, 05.10.18 13:23 |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
------------------ WBR, Igor |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Sandwich Сообщений: 137 Дата регистрации: 08.02.2014 |
Подождите Господа.
Все это я прекрасно понимаю. Но мой вопрос был не в том, НУЖНО или НЕ НУЖНО использовать public, а в том - что это? Мой косяк или разработчиков? Естественно, с бубном я решу задачу |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Конкретно по твоему вопросу - значение из Value комбобокса пропихивается в его источник данных (то что указано в ControlSource) ПОСЛЕ завершения работы InteractiveChange. Соответственно рефреш в обработчике этого события будет видеть в привязанном источнике всё ещё "старое" значение, хотя в .Value уже будет видно новое (только что изменённое).
Вообще для обновления других элементов при выборе из комбо в большинстве случаев лучше использовать событие Valid - когда уже "выбор завершён", а не InteractiveChange. А в некоторых случаях и вовсе LostFocus - т.к. если логика обновления "тяжёлая", то многократный её вызов при той же прокрутке мышкой в комбо - не лучший вариант. Но если нужна такого рода "отзывчивость интерфейса" то можно сделать хитрый трюк через таймер - в InteractiveChange включать таймер с заданным интервалом (скажем, в 500мс) а уже в таймере (первым делом выключив самого себя) прописать логику обновления интерфейса - но я ещё раз повторюсь, это имеет смысл для "тяжёлой" логики - например запросы обновляющие какие-то курсоры. Для простого рефреша достаточно перенести код в Valid. ------------------ WBR, Igor |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Sandwich Сообщений: 137 Дата регистрации: 08.02.2014 |
Извините, Маэстро
Причем здесь Valid или LostFocus? Мне (а точнее юзеру) нужно действие при изменении/выборе нового значения, а не при потере фокуса. Я уже писал, что с бубном решу проблему. Вопрос принципа: почему нужно для тривиального действия использовать этот бубен в виде таймера и пр.? И еще: никакой "тяжелой" логики вообще нет, просто изменение значения переменной. Почему поведение комбо зависит от "глобальности" этой переменной? Исправлено 1 раз(а). Последнее : Sandwich, 06.10.18 15:49 |
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
vk65 Сообщений: 402 Дата регистрации: 08.04.2008 |
|
Re: отображение 2-ой колонки в ComboBox-е с несколькими столбцами | |
---|---|
Sandwich Сообщений: 137 Дата регистрации: 08.02.2014 |
? о чем это
|
© 2000-2024 Fox Club  |