Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
vek21 Участник со стажем
Вступление в Клуб: 20.09.2007
|
Чт Сен 03, 2015 16:44  Комбо-бокс, зависящий от другого комбо-бокса |
|
Полезность: Нет оценки
|
Уважаемые знатоки! Наткнулся на такие грабли: на экранной форме два комбо-бокса, причем содержимое второго должно меняться при выборе значения из первого. Так вот ни фига! Изначальный список во втором комбо-боксе ну никак не меняется, что с ним ни делай! Вот простой пример:
Код: |
str [STRING_REC];
begin
if P_MESSAGE = 'DEFAULT' then
-- Формируем список хозяев
V_ARR1 := next_value('seq_id');
str.[STRING] := 'Петр Петрович';
V_OWNER := V_ARR1%insert(str);
str.[STRING] := 'Иван Иваныч';
V_OWNER := V_ARR1%insert(str);
-- Формируем список автомобилей
V_ARR2 := next_value('seq_id');
str.[STRING] := 'Иван-Опель';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Иван-Форд';
V_CAR := V_ARR2%insert(str);
P_INFO := 'OK, V_OWNER';
ElsIf P_MESSAGE = 'VALIDATE' Then
If P_INFO = 'V_OWNER' Then -- сделан выбор в 1-ом комбо-боксе
if V_OWNER.[STRING] = 'Иван Иваныч' then
V_ARR2%delete;
str.[STRING] := 'Иван-Опель';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Иван-Форд';
V_CAR := V_ARR2%insert(str);
elsif V_OWNER.[STRING] = 'Петр Петрович' then
V_ARR2%delete;
str.[STRING] := 'Петр-Фура';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Петр-Феррари';
V_CAR := V_ARR2%insert(str);
end if;
end if;
end if;
end;
|
Здесь V_CAR и V_OWNER - типа [STRING_REC_REF](ссылка на "Строка"),
V_ARR1 и V_ARR2 - типа [STRING_REC_ARR](массив "Строка")
str - типа [STRING_REC](структура "Строка")
Отладка показывает, что при выборе стоки "Петр Петрович" в 1-ом комбо-боксе программа честно приходит на редактирование V_ARR2, честно его меняет, но на экранной форме выпадающий список по-прежнему содержит только те значения, которые туда были затолканы в DEFAULT'e! Это печалит... Может, это как-то правится? Только не надо советовать поменять комбо-бокс на обычную кнопку входа в представление - это работает, и работает без проблем. Но чем провинился комбо-бокс, а? |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
|
 |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Чт Сен 03, 2015 18:01   |
|
Полезность: Нет оценки
|
Может быть, отправить из проверки в клиент-скрипт команды типа
Код: |
csmd.command( 'object1.refresh ') |
|
|
 |
vek21 Участник со стажем
Вступление в Клуб: 20.09.2007
|
Пт Сен 04, 2015 09:17   |
|
Полезность: Нет оценки
|
Нет, vtar, не помогает. |
|
 |
vek21 Участник со стажем
Вступление в Клуб: 20.09.2007
|
Пт Сен 04, 2015 09:29   |
|
Полезность: Нет оценки
|
Большое спасибо, Евгений за анализ темы. Но судя по тому, что прочитал - получается, миссия невыполнима. Придется оставлять на форме один комбо-бокс, а вместо второго показывать представление из динамически формируемых строк. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Сен 04, 2015 09:33   |
|
Полезность: Нет оценки
|
vek21 пишет: | Большое спасибо, Евгений за анализ темы. Но судя по тому, что прочитал - получается, миссия невыполнима. Придется оставлять на форме один комбо-бокс, а вместо второго показывать представление из динамически формируемых строк. |
Миссия невыполнима. ...не очень хорошая фраза. ...
Если скинешь mdb, посмотрю ближе к вечеру |
|
 |
vek21 Участник со стажем
Вступление в Клуб: 20.09.2007
|
Пт Сен 04, 2015 09:50   |
|
Полезность: Нет оценки
|
Пожалуйста. Разворачивается в "Платежные документы", операция Tst.
Горячая клавиша - Shift-1  |
|
 |
prankster Профи
Вступление в Клуб: 22.08.2014
|
Пт Сен 04, 2015 10:08   |
|
Полезность: 3
|
vek21 пишет: | Пожалуйста. Разворачивается в "Платежные документы", операция Tst.
Горячая клавиша - Shift-1  |
Код: | str [STRING_REC];
begin
if P_MESSAGE = 'DEFAULT' then
-- Формируем список хозяев
V_ARR1 := next_value('seq_id');
str.[STRING] := 'Петр Петрович';
V_OWNER := V_ARR1%insert(str);
str.[STRING] := 'Иван Иваныч';
V_OWNER := V_ARR1%insert(str);
-- Формируем список автомобилей
V_ARR2 := next_value('seq_id');
str.[STRING] := 'Иван-Опель';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Иван-Форд';
V_CAR := V_ARR2%insert(str);
P_INFO := 'OK, %VAR%.V_OWNER';
ElsIf P_MESSAGE = 'VALIDATE' Then
If P_INFO = '%VAR%.V_OWNER' Then -- сделан выбор в 1-ом комбо-боксе
if V_OWNER.[STRING] = 'Иван Иваныч' then
V_ARR2%delete;
str.[STRING] := 'Иван-Опель';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Иван-Форд';
V_CAR := V_ARR2%insert(str);
elsif V_OWNER.[STRING] = 'Петр Петрович' then
V_ARR2%delete;
str.[STRING] := 'Петр-Фура';
V_CAR := V_ARR2%insert(str);
str.[STRING] := 'Петр-Феррари';
V_CAR := V_ARR2%insert(str);
end if;
end if;
end if;
end; |
Скрипт:
Код: |
Public Sub Combo1_OnSelChange()
Combo1.Refresh
Combo2.Refresh
End Sub
Public Sub Combo2_OnSelChange()
Combo1.Refresh
Combo2.Refresh
End Sub
Public Function Main(LastControl)
If LastControl Is Nothing Then
Combo1.UpdateOnChange = True
Combo2.UpdateOnChange = True
End If
Main = True
End Function
|
Пробуйте  |
|
 |
vek21 Участник со стажем
Вступление в Клуб: 20.09.2007
|
Пт Сен 04, 2015 10:20   |
|
Полезность: Нет оценки
|
Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Сен 04, 2015 10:22   |
|
Полезность: Нет оценки
|
vek21 пишет: | Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений. |
Prankster же сделал ) ему спасибо. |
|
 |
prankster Профи
Вступление в Клуб: 22.08.2014
|
Пт Сен 04, 2015 10:23   |
|
Полезность: Нет оценки
|
vek21 пишет: | Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений. |
Да, Евгений, спасибо  |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Пт Сен 04, 2015 10:33   |
|
Полезность: Нет оценки
|
prankster пишет: | vek21 пишет: | Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений. |
Да, Евгений, спасибо  |
Поставлю тебе +1 за помощь коллеге. ..который мог бы и сам об этом побеспокоиться
За былые заслуги так сказать ) |
|
 |
SAF Участник
Вступление в Клуб: 29.12.2017
|
Пт Дек 29, 2017 15:44   |
|
Полезность: Нет оценки
|
Коллеги помогите с ошибкой:
"Ошибка исполнения клиент скрипта: Описание: Объект не поддерживает это свойство или метод 'Combo3.UpdateOnChange'
Источник: Ошибка выполнения Microsoft VBScript
Строка: 13
Номер ошибки: 0
Код ошибки: 800A01B6"
Код клиент скрипта:
Код: |
Public Sub Combo3_OnSelChange()
Combo3.Refresh
Combo4.Refresh
End Sub
Public Sub Combo4_OnSelChange()
Combo3.Refresh
Combo4.Refresh
End Sub
Public Function Main(LastControl)
If LastControl Is Nothing Then
Combo3.UpdateOnChange = True
Combo4.UpdateOnChange = True
End If
Main = True
End Function
|
|
|
 |
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Вт Янв 09, 2018 04:17   |
|
Полезность: Нет оценки
|
непонятно,
1. Combo3 точно комбобокс на форме ?
2. Vj;tn русская букофка закралась - переписать вызов заново ? |
|
 |
SAF Участник
Вступление в Клуб: 29.12.2017
|
Пн Янв 15, 2018 21:41   |
|
Полезность: Нет оценки
|
Цитата: | непонятно,
1. Combo3 точно комбобокс на форме ?
2. Vj;tn русская букофка закралась - переписать вызов заново ? |
1. Да
2. Нет вроде русской букофки
Скорее какой-то компонент в ОС не установлен, потому как на некоторых компах работает, а на некоторых нет |
|
 |
|