30.03.2016, 19:06 | #1 |
Участник
|
дисплей-метод не срабатывает
Добрый день!
Есть форма, на ней датасорс. На форме есть контролы, подвязанные к датасорсу. В таблице есть display-метод, который должен срабатывать при смене значения в некотором поле. На форме есть грид. В гриде том есть контрол, через который меняется значение. И есть контрол, привязанный к дисплей-методу. В гриде все работает, все сменяется, дисплей метод отрабатывает. НО (!) если контролы оформить не в грид, а отдельно - дисплей-метод не срабатывает автоматически! срабатывает только если щелкнуть в контрол с дисплей-методом.... в гриде, повторюсь, все работает... Поиском по форуму нашлось подобное, но к сожалению мою проблему ответы не решили. |
|
30.03.2016, 19:32 | #2 |
Участник
|
Цитата:
display-метод срабатывает при попытке отрисовать поля записи. display-метод не срабатывает и не вызывается ядром при смене значения. винда очень сильно кэширует отображаемые участки экрана и не дает команду перерисовать их, если нет грида. а грид отрисовывается очень часто, слишком часто. |
|
30.03.2016, 19:39 | #3 |
Участник
|
Цитата:
эти методы позволяет запретить перерисовку формы и контрола. делайте element.redraw или myControl.updateWindow чтобы принудительно заставить аксапту перерисовать окно или контрол |
|
30.03.2016, 20:21 | #4 |
Боец
|
Цитата:
Если уж стучать в бубен, то лучше так: P.S.: Да, если ничего не путаю, для версии AX < 2009, "нажимать" нужно F5, для тех что по-выше "Ctrl+F5". Последний раз редактировалось DSPIC; 30.03.2016 в 20:31. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
30.03.2016, 20:29 | #5 |
Участник
|
Цитата:
Сообщение от DSPIC
Если уж стучать в бубен, то лучше так:
|
|
30.03.2016, 20:50 | #6 |
Участник
|
После redraw у меня форма не прорисовывается полностью, странно работает...
myControl.updateWindow не отработал вообще. А F5 если "нажимаю" на методе modified поля, то оно возвращает прежнее значение этого поля , сперва надо write принудительно сделать? При том если я сворачиваю-разворачиваю даже группу с этим полем или щелкая по названию группы даже, то все перерисовывается отлично. Какую-то правильную надо перерисовку. |
|
30.03.2016, 21:34 | #7 |
Участник
|
Цитата:
можно конечно начать обновлять датасорс при помощи table_ds.refresh() или table_ds.refreshEx() https://msdn.microsoft.com/en-us/lib...e.refresh.aspx эти методы вроде даже к базе не обращаются. но они действует на все поля датасорса. + про обновление с данными (прикольный комментарий) https://msdn.microsoft.com/en-us/library/hh812104.aspx |
|
30.03.2016, 21:49 | #8 |
Участник
|
Цитата:
Сообщение от mazzy
а какая версия аксапты и виндов? странно.
можно конечно начать обновлять датасорс при помощи table_ds.refresh() или table_ds.refreshEx() https://msdn.microsoft.com/en-us/lib...e.refresh.aspx эти методы вроде даже к базе не обращаются. но они действует на все поля датасорса. + про обновление с данными (прикольный комментарий) https://msdn.microsoft.com/en-us/library/hh812104.aspx |
|
31.03.2016, 13:21 | #9 |
Участник
|
По ссылке, приведенной DSPIC в конце той темы кеширование и вычисление display метода
X++: MyTable_ds.cacheCalculateMethod(tablemethodstr(MyTable, methodName));
MyTable_ds.refresh(); PS: MyTable_ds - это стандартное имя, которое формируется автоматически, путем добавления окончания "_ds" к имени указанному как DataSource формы Например, если у Вас в DataSource в качестве имени указано InventTable, то в методах формы к этому DataSource можно обращаться через переменную InventTable_ds.
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
04.04.2016, 21:29 | #10 |
Участник
|
можно взглянуть на сам метод?
__________________
Felix nihil admirari |
|
05.04.2016, 21:12 | #11 |
Участник
|
public display QTY ()
{ qty ret ; ret = this.MaxVolume - this.MinVolume return ret; } в гриде сразу отрабатывает, в отдельном поле на методе после принудительного ds_write(). |
|
08.04.2016, 08:22 | #12 |
Участник
|
|
|