CftClub.ru
Клуб специалистов ЦФТ-Банк

Комбо-бокс, зависящий от другого комбо-бокса

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
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
СообщениеЧт Сен 03, 2015 18:00    Ответить с цитатой
Полезность: Нет оценки
Вот тут тема уже раскрывалась

http://cftclub.ru/viewtopic.php?t=1883&highlight=Combo



ну и до кучи
http://cftclub.ru/viewtopic.php?t=3460&highlight=combobox
http://cftclub.ru/viewtopic.php?t=3033&highlight=combobox
http://cftclub.ru/viewtopic.php?t=3827&start=0
http://cftclub.ru/viewtopic.php?t=230&highlight=combobox
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    Ответить с цитатой
Полезность: Нет оценки
См. вложениеДата архива: 04.09.2015 09:50
Размер архива: 22.73 КБ

Пожалуйста. Разворачивается в "Платежные документы", операция Tst.
Горячая клавиша - Shift-1 Smile

prankster
Профи
Открытие


Вступление в Клуб: 22.08.2014
СообщениеПт Сен 04, 2015 10:08    Ответить с цитатой
Полезность: 3
vek21 пишет:
Пожалуйста. Разворачивается в "Платежные документы", операция Tst.
Горячая клавиша - Shift-1 Smile


Код:
   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



Пробуйте Smile
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 пишет:
Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений.


Да, Евгений, спасибо Laughing
Матвеев Евгений
Профи
Неподтвержденный


Вступление в Клуб: 31.01.2012
СообщениеПт Сен 04, 2015 10:33    Ответить с цитатой
Полезность: Нет оценки
prankster пишет:
vek21 пишет:
Как там Матроскин в мультике кричал? "Ура! Заработало!"
Беру все слова взад по поводу миссии невыполнимой.
Большое спасибо, Евгений.


Да, Евгений, спасибо Laughing


Поставлю тебе +1 за помощь коллеге. ..который мог бы и сам об этом побеспокоиться

За былые заслуги так сказать )
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru