|
16.06.2011, 15:04 | #1 |
newborn in DAX
|
Форма с комбо и запуск разных форм по выбранному значению
Самое простое решение это создание кучи однотипных форм которые вызываются из общей формы по нажатию соответствующей кнопки.
Проблема в том что больше половины из них абсолютно одинаковы и различаются что в executeQuery фильтр= 4, в другой форме 5 и.д. Т.е. copy-paste и дело в шляпе. Но не хочется засорять. Есть несколько которые особенные. Хочется сделать форму с комбо всех опций. А в executeQuery что-то типа case 4: //особая форма как её запустить? case 1,2,3,6,7: //запустить общую форму но передать в неё параметр для фильтрации 1 или 2 или 3 .. то что пользователь выберет Или такое возможно и нужно ли много программировать?(уровень начинающий) В основной таблице одни и те же поля использовались для разных значений в зависимости от параметра.(типа то номер телефона, то номер машины) И ещё вопрос если есть возможность в общей форме сделать часть полей невидимыми в зависимости от выбранного параметра и менять названия поля в гриде Видимо это тоже надо как-то передавать ? |
|
16.06.2011, 15:10 | #2 |
Участник
|
Вопрос сводится к такому. Как передать на форму параметр?
Для этого нужно использовать структуру Args. Ищите на форуме |
|
16.06.2011, 15:27 | #3 |
Ищущий знания...
|
можно на одну форму создать много MenuItem-ов. У них заполнить свойства EnumTypeParameter и EnumParameter. И в дальнейшем вызывать нужные вам MenuItem-ы.
На самой форме вы увидите эти параметры через element.args(). В частности: X++: element.args().parmEnumType(); element.args().parmEnum(); element.args().parmEnum(); - это какое значение Enuma передано
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
23.06.2011, 13:56 | #4 |
newborn in DAX
|
lev'
у меня не Enum а ExtendetDataType т.е. я не могу записать их в MenuItem поле EnumTypeParameter . Создавать свой Enum или как-то по другому можно используя ExtendetDataType |
|
23.06.2011, 14:13 | #5 |
Участник
|
Цитата:
Тогда в args можно передавать соответствующую запись этого справочника. Для передачи табличных курсоров в структуре args предусмотрен метод record(). Если немного изменить дизайн формы и вместо комбобокса отобразить грид отображающий те же значения, то тогда можно стандартными средствми MorphX (без программирования) добиться передачи активной строки грида через menuitem Последний раз редактировалось S.Kuskov; 23.06.2011 в 14:16. |
|
23.06.2011, 14:31 | #6 |
newborn in DAX
|
Цитата:
да Вы правы ExtendetDataType привязан к таблице. Честно пока с Args не очень понятно - пытаюсь читать форум. Может есть ссылки или tutorial в самой DAX 2009 это как? Я начинающий |
|
23.06.2011, 14:15 | #7 |
Участник
|
У MenuItem-ов есть еще такое свойство как Parametersю. Туда можно писать все что угодно , например, какой нибудь текст "Вариант1",2,3 и т.д.
И в форме получать его через element.args().parm();
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2), timaluhs (1). |
23.06.2011, 14:56 | #8 |
Участник
|
Цитата:
В основное форме создайте переменную типа str _variant. В методе init() вашей формы перед супером напишите _variant = element.args().parm(); И далее как вы просите в executeQuery что-то типа case 4: ................
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.06.2011, 15:18 | #9 |
newborn in DAX
|
Цитата:
Сообщение от Pustik
Ну сделайте вы основной форме меню - MenuButton, прикрепите к нему несколько MenuItem-ов, которые будут открывать вашу форму ,у которых в свойстве Parameters будет стоять текстовое значение. У одного - '4', у второго - '1', у третьего '2' и т.д.
В основное форме создайте переменную типа str _variant. В методе init() вашей формы перед супером напишите _variant = element.args().parm(); И далее как вы просите в executeQuery что-то типа case 4: ................ На форме1 есть MenuItem который вызывает форму2 все определения я делаю на форме 2? вот код ClassDeclaration str _variant; init: _variant = element.args().parm(); super(); executeQuery: queryAuto.value(sysQuery::value(_variant)); ... super; получаю пустую форму если в явном виде - queryAuto.value(sysQuery::value("12")); то выдаёт результат Где я не права? Debuger на _variant ругается: Error: Symbol "_variant" was not found Последний раз редактировалось timaluhs; 23.06.2011 в 15:21. |
|
23.06.2011, 15:30 | #10 |
Ищущий знания...
|
Цитата:
и воспользуйтесь советом Pustik посмотрите в отладчике заполняется ли _variant каким либо значением.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
23.06.2011, 15:43 | #11 |
newborn in DAX
|
Цитата:
Debuger на _variant ругается: Error: Symbol "_variant" was not found а где правильно? |
|
23.06.2011, 16:09 | #12 |
Ищущий знания...
|
ну по идее конечно в ините формы нужно выполнить инициализацию по входящим параметрам из args.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
23.06.2011, 15:27 | #13 |
Участник
|
в отладчике в executeQuery убедитесь, что переменная _variant имеет значение "12", потому что если если в явном виде - queryAuto.value(sysQuery::value("12")) работает, должно работать
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.06.2011, 15:29 | #14 |
newborn in DAX
|
Debuger на _variant ругается:
Error: Symbol "_variant" was not found что может быть не на месте? |
|
23.06.2011, 15:32 | #15 |
Ищущий знания...
|
ещё вопросик, ругается при инициализации или при использовании в ExecuteQuery?
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
23.06.2011, 15:38 | #16 |
Участник
|
Ну не знаю попробуйте в свойстве менюайтема parameters поставить ни число, а например "Вариант12".И в executeQuery тогда вот так :
switch (_variant) { case 'Вариант12': queryAuto.value(sysQuery::value("12")); ........... } ..........
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.06.2011, 15:49 | #17 |
Участник
|
логичнее на форме, но обязательно до супера. Вообще не понятно, попробуйте просто тогда вот так:
В методе executeQuery : if (element.args().parm() == 'Вариант12') queryAuto.value(sysQuery::value("12"));
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
23.06.2011, 16:06 | #18 |
newborn in DAX
|
заработало не понятно как и почему. Может не сохранила во время.
Я пыталась queryAuto.value(sysQuery::value(element.args().parm())); но тоже не работало. Кстати отладчик упорно нр признаёт _variant хотя есть данные на форме |
|
23.06.2011, 16:15 | #19 |
newborn in DAX
|
|
|
23.06.2011, 16:36 | #20 |
Участник
|
Цитата:
Вам можно было создать свой Enum, создать в нем элементы, как ваши варианты прикрутить его к менюайтемам и использовать конструкцию, о которой говорил lev. Так было бы даже, можно так сказать, красивее .
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|