30.08.2002, 10:12 | #1 |
Участник
|
Как мне обновить Grid расположенный на другой форме?
Допустим у на есть первая форма с заказами расположенными в Grid-е.
И есть кнопка «Новый заказ». По этой кнопке вызывается вторая форма в которой заполняются параметры нового заказа. Потом по нажатию на кнопку второй формы «Применить» она (то есть вторая форма) должна закрываться, а Grid на первой форме должен обновится (то есть должны появится данные, которые только, что вводились во второй форме). Как мне обновить Grid расположенный на другой форме? |
|
30.08.2002, 11:03 | #2 |
Участник
|
Привет.
1. В качестве параметра в caller передай element первой формы и после этого из второй формы сможешь запускать любой метод первой формы (element.args().caller().method()) 2. Метод clicked() кнопки на первой форме PHP код:
__________________
Сергей |
|
|
За это сообщение автора поблагодарили: ChD (0), alicedr (1). |
31.08.2002, 23:22 | #3 |
Участник
|
Хотелось бы отметить, что существует возможность повесить на кнопку пункт меню, который будет открывать нужную Вам форму. А в свойствах кнопки, можно прописать DataSource - SalesTable.
И потом, такой сложный код метода clicked() на кнопке превращается в следующий : clicked() { super(); SalesTable_ds.executeQuery(); } так все просто вооот.... |
|
|
За это сообщение автора поблагодарили: NikolayS (1). |
31.08.2002, 23:45 | #4 |
Продавец игрушек
|
Проблема от того, что в аксапте нет событий, на которые можно было бы подписываться. И необновление грида - самое проитвное её следствие.
__________________
С уважением, Роман Кошелев. |
|
02.09.2002, 10:04 | #5 |
Участник
|
Роман, это палка о двух концах.
Автоматическое обновление потенциально очень опасная весчь. И очень опасная. В 1С вот формы сами обновляются. И там такого наворотили на это свойство. Насчет подписки. Согласен, что тригеров нет. Но можно извратится через таймер. |
|
02.09.2002, 13:55 | #6 |
Участник
|
Цитата:
Изначально опубликовано stranger
Хотелось бы отметить, что существует возможность повесить на кнопку пункт меню, который будет открывать нужную Вам форму. С методом clicked я погорячился
__________________
Сергей |
|
12.09.2002, 08:56 | #7 |
Участник
|
Цитата:
Изначально опубликовано stranger
Хотелось бы отметить, что существует возможность повесить на кнопку пункт меню, который будет открывать нужную Вам форму. А в свойствах кнопки, можно прописать DataSource - SalesTable. И потом, такой сложный код метода clicked() на кнопке превращается в следующий : clicked() { super(); SalesTable_ds.executeQuery(); } так все просто вооот.... |
|
12.09.2002, 09:34 | #8 |
----------------
|
1. Передается курсор из вызывающей формы (через menuItem или args)
2. В вызванной форме после нужных операций делают salesTable.dataSource().research(), где salesTable = переданный курсор |
|
21.01.2013, 15:25 | #9 |
Участник
|
Аналогичная задача.
Из формы 1 вызывается форма 2. По нажатию на форме 2 кнопки выполняется класс, после чего необходимо отжать чекбокс в гриде на форме 1. Делаю: в форма2.Init() X++: CallerForm=element.args().caller(); //где CallerForm обьявлен в ClassDeclaration формы: //Form CallerForm; X++: void clicked() { FormCheckBoxControl fieldCopy; ; super(); // fieldCopy = CallerForm.design().controlName(identifierstr(Copy)); //выдает ошибку компилятора // "Класс FormBuildDesign не содержит эту функцию" fieldCopy = CallerForm.design().control(identifierstr(Copy)); // выдает ошибку времени выполнения "Обьект не инициализирован" // на следующей строчке fieldCopy.value(false); } Что неверно? Или как эту задачу выполнить правильнее? |
|
21.01.2013, 15:49 | #10 |
Участник
|
|
|
21.01.2013, 16:11 | #11 |
Участник
|
Как вариант :
В первой форме делаете метод: X++: void chkMove(NoYes _var = NoYes::No)
{
fieldCopy.value(_var);
} X++: public class FormRun extends ObjectRun { Object callerForm; } X++: CallerForm=element.args().caller(); //где CallerForm обьявлен в ClassDeclaration формы: //Object CallerForm; - вот это важно X++: void clicked() { super(); callerForm.chkMove(NoYes::No); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. Последний раз редактировалось Pustik; 21.01.2013 в 16:13. |
|
21.01.2013, 16:18 | #12 |
Участник
|
Отлично! Теперь
X++: fieldCopy = CallerForm.design().controlName(identifierstr(Copy)); X++: CallerForm.dataSource().research(); |
|
21.01.2013, 16:25 | #13 |
Участник
|
|
|
21.01.2013, 16:32 | #14 |
Участник
|
не заметил, что это у вас на гриде, тогда в первой форме вот так :
X++: void chkMove(NoYes _var = NoYes::No) { MyTable_ds.marked(_var ,MyTable ); // это edit метод MyTable_ds.reread(); MyTable_ds.refresh(); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
21.01.2013, 16:38 | #15 |
Участник
|
Все равно чекбокс отмечен. Вероятно из-за того, что его значение хранится в переменной mark формы 1. К переменным как-то можно добраться? Или придется заводить невидимый контрол на форме1, который будет изменять переменную mark?
|
|
21.01.2013, 16:45 | #16 |
Участник
|
Получилось вторым способом(через доп. контрол на форме).
Ace of Database, Pustik, спасибо!!! |
|
21.01.2013, 16:48 | #17 |
Участник
|
Тогда вместо обращения к контролу, вызовите edit-метод напрямую.
X++: Object obj; .... obj = callerForm; obj.myEditMethod(true, false); callerForm.redraw(); |
|
22.01.2013, 14:18 | #18 |
Участник
|
Предложу работающий но не стандартный метод...
winapi::sendmessage(callerform.hwnd(), WM_KEYDOWN, VK_F5, 0) :O) Для разнообразия. C уважением, Дмитрий. |
|
|
|