AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 04.02.2011, 13:55   #1  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Дублирование адресов на форме поставщиков Ax2009
Возникла необходимость продублировать грид с адресами, теперь при попытке вставить запись в новый грид. фокус перескакивает на оригинальный. (гриды на разных закладках, источник(и) данных один(и))

Можно ли вообще так делать?
И где что можно перекрыть, чтобы не прыгать по закладкам? Никак не соображу

Geändert von uchenik (04.02.2011 um 14:05 Uhr)
Alt 04.02.2011, 14:58   #2  
jonny ist offline
jonny
Участник
Benutzerbild von jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Registriert seit: 10.02.2006
Ort: СПб-Екб-?
А как делали? Сдублировали оригинальный TabPage с адресом?
Если так, то смотрите в новом TabPage метод tabPageAcivated, скорее всего тоже перенесли. Там строчка
X++:
  addressGrid.setFocus();
И делает активным исходный грид
Alt 04.02.2011, 15:03   #3  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von uchenik Beitrag anzeigen
гриды на разных закладках, источник(и) данных один(и)
Само по себе это не должно вызывать такого поведения. Скорее всего фокус ввода смещает код находящийся в методах источника данных. Что бы точно выяснить источник проблемы можно поставить breakpoint в методе pageActivated вкладки и по стеку вызовов вычислить виновника.

Zitat:
Zitat von jonny Beitrag anzeigen
А как делали? Сдублировали оригинальный TabPage с адресом?
Если так, то смотрите в новом TabPage метод tabPageAcivated, скорее всего тоже перенесли. Там строчка
X++:
  addressGrid.setFocus();
И делает активным исходный грид
если так, то по логике на новую вкладку вообще не попасть

Geändert von S.Kuskov (04.02.2011 um 15:05 Uhr)
Alt 04.02.2011, 15:03   #4  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
Сделайте второй такой же датасорс с LinkType : Passive, и привяжите к нему второй tabpage, прыгать не будет - это, как вариант.
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 04.02.2011, 15:08   #5  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Zitat:
Zitat von jonny Beitrag anzeigen
А как делали? Сдублировали оригинальный TabPage с адресом?
Если так, то смотрите в новом TabPage метод tabPageAcivated, скорее всего тоже перенесли. Там строчка
X++:
  addressGrid.setFocus();
И делает активным исходный грид
Не, это все естественно поправил.
Alt 04.02.2011, 15:09   #6  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Zitat:
Zitat von S.Kuskov Beitrag anzeigen
Само по себе это не должно вызывать такого поведения.
Похоже я не прав. Сейчас сделал тестовую формочку. Действительно прыгает при вставке новой строки!
Alt 04.02.2011, 15:09   #7  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
еще вариант - наверной самый лучший - в свойствах второго TabPage ставите Avtodeclaration - Yes; и в методе Create датасоурса пишите :


X++:
public void create(boolean _append = false)
{
    boolean active = false;

    if (TabPage2.isActivePage())
        active = true;

    super(_append);

    if (active)
       TabPage2.activatePage();
}
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 04.02.2011, 15:18   #8  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Zitat:
Zitat von Pustik Beitrag anzeigen
еще вариант - наверной самый лучший - в свойствах второго TabPage ставите Avtodeclaration - Yes; и в методе Create датасоурса пишите :


X++:
public void create(boolean _append = false)
{
    boolean active = false;
 
    if (TabPage2.isActivePage())
        active = true;
 
    super(_append);
 
    if (active)
       TabPage2.activatePage();
}
Что-то похожее тоже сочинял, дело в том, что аксапта все равно успевает открыть оригинал, а там еще и executeQuery дернуться успевает
Alt 04.02.2011, 15:29   #9  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
в ClassDeclaration формы описываете переменную
X++:
boolean active;
в методе init формы до super() пишите
X++:
active = true;
в методе executequery() datasourse пишите
X++:
if (active == false)
        return;
в методе create() датасорса пишите
X++:
public void create(boolean _append = false)
{

    active = false;

    if (TabPage2.isActivePage())
        active = true;

    super(_append);

    if (active)
       TabPage2.activatePage();

    active = true;
}
в методе PageActivated() первого TabePage пишите
X++:
public void pageActivated()
{
    if (active == true)
        return;
    super();
}
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.

Geändert von Pustik (04.02.2011 um 15:33 Uhr)
Alt 04.02.2011, 15:34   #10  
Zabr ist offline
Zabr
Участник
Axapta Retail User
 
1.202 / 345 (14) ++++++
Registriert seit: 26.06.2002
Ort: Москва
Чем обусловлено использование одного и того же набора датасорсов для разных гридов? если ничем кроме лени - то сделайте отдельные датасорсы, быстрее отмучаетесь
Alt 04.02.2011, 15:44   #11  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Zitat:
Zitat von Pustik Beitrag anzeigen
в ClassDeclaration формы описываете переменную
...
Вот в форме поставщиков не работает.

Zitat:
Zitat von Zabr Beitrag anzeigen
Чем обусловлено использование одного и того же набора датасорсов для разных гридов? если ничем кроме лени - то сделайте отдельные датасорсы, быстрее отмучаетесь
Какой-то подход не очень, куча лишних источников данных, нужно помнить, что их править только вместе.
Alt 04.02.2011, 16:09   #12  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
а куда у вас прыгает на закладку обзор или на закладку первого адреса?
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 04.02.2011, 16:19   #13  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
declaration
X++:
boolean _create
init
X++:
_create = false
create
X++:
if (Tab.isActivePage())
 _create = true;
 
super(...
TabChange
X++:
...
if (_create)
return false;
...
Но change дергается дважды, и где-то надо сбросить _create.
Alt 04.02.2011, 16:19   #14  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Zitat:
Zitat von Pustik Beitrag anzeigen
а куда у вас прыгает на закладку обзор или на закладку первого адреса?
На закладку первого грида.
Alt 04.02.2011, 16:21   #15  
S.Kuskov ist offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3.448 / 1792 (66) ++++++++
Registriert seit: 28.04.2007
Ort: Калуга
Проследил источник вызова pageActivated. Легче не стало
Zitat:
[c] \Classes\FormTabPageControl\pageActivated 4
[c] \Classes\FormTabControl\TabChanged
[c] \Classes\FormStringControl\enter
[c] \Classes\FormRun\selectControl
[c] \Classes\FormDataSource\create
[c] \Classes\FormDataSource\Next
[c] \Classes\FormRun\task
[c] \Classes\SysSetupFormRun\task
Так же заметил один странный момент. Если в методе create поставить breakpoint, то переключение вкладки не происходит!
X++:
public void create(boolean _append = false)
{
    breakpoint;
    super(_append);
}
Прям квантовая физика какая-то. Наблюдение за экспериментом меняет результаты эксперимента

P.S.: Эксперименты проводил на простейшей тестовой формочке, так что влияние других факторов минимально.
Alt 04.02.2011, 16:33   #16  
Pustik ist offline
Pustik
Участник
 
807 / 372 (14) ++++++
Registriert seit: 04.06.2004
сделайте вторую переменную для отслеживания второго дергания change. например счетчик i = 1; ну что-то типа
TabChange
X++:
if (_create && i < 2)
    {
        i++
        return false;
    }
а в конце Create обнуляйте
X++:
super();
i=0
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Alt 04.02.2011, 16:37   #17  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
Ну это совсем костыль какой-то, а если оно три раза будет вызываться?
Если пытаться корректировать в pageActivated, там может раз 30 дернуться, в зависимости от версии
Alt 04.02.2011, 17:20   #18  
uchenik ist offline
uchenik
Участник
 
119 / 20 (1) +++
Registriert seit: 15.12.2008
X++:
public boolean tabChange(int _FromTab)
{
    boolean ret;
    ;
    if (_create)
    {
        CopyOfAddressGrid.setFocus();
        _create = false;
        return false;
    }
    ret = super(_FromTab);
    return ret;
}
более-менее, на вид ошибка лишь в том, что если в новом гриде создали строку, то при переходе на дубль грида вызывается обновление источника данных.
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Как правильно связать таблицы в форме? Как показать параметры партии? mazzy DAX: Программирование 10 27.10.2010 15:56
Несинхронность размерности полей в форме поиска... glibs DAX: Функционал 0 05.04.2010 21:54
Shekhar: Dynamics AX2009 : Standalone Installation on Vista with Role centres and workflow. Blog bot DAX Blogs 0 30.03.2010 15:05
На форме один lookup для Клиентов и Поставщиков tolstjak DAX: Программирование 10 17.03.2010 16:20
ax2009 & SSRS kitty DAX: Программирование 6 02.04.2009 10:38

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 22:54 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.