AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.09.2015, 17:22   #1  
syl is offline
syl
Участник
Аватар для syl
 
236 / 21 (1) +++
Регистрация: 10.06.2015
Адрес: Киев
Обновление грида на форме
Есть на форме 2 грида.
В первой заголовки LedgerJournalTable, во второй строки LedgerJournalTrans.
В каждом гриде присутствует checkbox(edit method)

Для LedgerJournalTrans
X++:
edit boolean Copy(boolean _set, LedgerJournalTrans _LJT, boolean _mark)
{
    if (_set)
    {
        if(!_mark)
        {
            if(paMarked.exists(_LJT.RecId))
            {
                paMarked.remove(_LJT.RecId);
            }
        }
        else
        {
            paMarked.insert(_LJT.RecId, _LJT.DocumentNum);
        }
    }
    return paMarked.exists(_LJT.RecId);
}
Для LedgerJournalTable
X++:
edit boolean CopyLines(boolean _set, LedgerJournalTable _LJT, boolean _mark)
{
    Query q;
    QueryRun queryRun;
    QueryBuildDataSource qbLJT;
    QueryBuildDataSource qbLJTT;
    LedgerJournalTrans ljt;
    boolean ret;

    q = new Query();

    qbLJT = q.addDataSource(tablenum(LedgerJournalTable));
    qbLJT.relations(true);
    qbLJTT = qbLJT.addDataSource(tablenum(LedgerJournalTrans));
    qbLJTT.relations(true);
    qbLJT.addRange(fieldnum(LedgerJournalTable, RecId)).value(SysQuery::value(_LJT.RecId));

    queryRun = new QueryRun(q);
    while(queryRun.next())
    {
        ljt = queryRun.get(tableNum(LedgerJournalTrans));
        ret = LedgerJournalTrans_ds.Copy(_set, ljt, _mark);    
    }
    LedgerJournalTrans_ds.refresh();
    return ret;
}
Во втором методе мне нужно проставить галки в гриде для LedgerJournalTrans. Для отображения я попробовал использовать LedgerJournalTrans_ds.refresh();, что существенно замедлило работу (хотя и не критично). Проблема в том что при таком подходе отображается галка только на первой строке, если строк больше чем одна, то что бы увидеть галки, надо либо вручную обновить грид (F5) либо переключиться на другую запись. Насколько я понимаю данный подход не совсем правильный. Подскажите как поступить в данном случае?

Последний раз редактировалось syl; 11.09.2015 в 17:33.
Старый 13.09.2015, 21:14   #2  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
использовать
X++:
ledgerJournalTrans_ds.research(true)
.refresh() лишь обновляет отображаемые данные текущего курсора (выбранной строки), без перечитывания данных из БД (для этого есть .reread(), который так же перечитывает только текущую строку). Тут надо понимать, что вызовы .research() или .executeQuery() отправят запрос к БД (или не отправят при правильных настройках кеширования), что может вызвать некоторые дополнительные накладные расходы. Если у вас новые значения хранятся в памяти, а не в БД и отображаются на гриде, то можно попробовать использовать
X++:
ledgerJournalTrans.refreshEx(-1)
описание всех методов есть на MSDN
смотрите так же Kashperuk Ivan: Tutorial: refresh, reread, research, executeQuery - which one to use?
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 13.09.2015 в 21:33.
Старый 14.09.2015, 13:36   #3  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Второй метод - Можно сразу в Daily AX WTF.
За это сообщение автора поблагодарили: skuull (1).
Старый 15.09.2015, 13:03   #4  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от Napalm Посмотреть сообщение
Второй метод - Можно сразу в Daily AX WTF.
А можете более развернуто пояснить свою точку зрения? Для того, чтобы обновить поле-чекбокс, которое выведено только на грид и сделано через edit-метод (и маркированные записи хранятся в Set) по идее этого метода должно быть достаточно, по предоставленной ссылке есть четкое его описание, а так же ограничение. Подходит или нет, каждый решает исходя из поставленных задач и целей. На всякий случай приведу описание тут:

Цитата:
Сообщение от Blog bot Посмотреть сообщение
Источник: http://kashperuk.blogspot.com/2010/0...-research.html

refreshEx

Does a redraw of the grid rows, depending on the optional argment for specifying the number of the record to refresh (and this means the actual row number in the grid, which is less useful for AX devs). Special argument values include -1, which means that all records will be redrawn, and -2, which redraws all marked records and records with displayOptions. Default argument value is -2.
This method should be used sparingly, in cases where multiple rows from the grid are updated, resulting in changes in their displayOptions, as an example. So you should avoid using it as a replacement for refresh(), since they actually have completely different implementations in the kernel.
Also, note, that refreshEx() only redraws the grid, so the controls not in the grid might still contain outdated values. Refresh() updates everything, since this is its intention.

Источник: http://kashperuk.blogspot.com/2010/0...-research.html
Может я чего-то не знаю и есть еще какие-то скрытые причины, чтобы его не использовать?
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 15.09.2015 в 13:05.
Старый 15.09.2015, 16:22   #5  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
А можете более развернуто пояснить свою точку зрения?
1. Выборка данных из БД на клиенте.
2. Выборка всех полей из LedgerJournalTable и LedgerJournalTrans, когда нужен только RecId из LedgerJournalTrans.
3. Названия переменных - qbLJT для LedgerJournalTable, _ljt для LedgerJournalTable - но ljt для LedgerJournalTrans.
4. Нагрузка на АОС и БД когда edit метод CopyLines будет вызываться на форме в display режиме (_set = false).
За это сообщение автора поблагодарили: pedrozzz (0).
Старый 15.09.2015, 17:23   #6  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Реализация подобного в стандартных SalesCopying/PurchCopying в качестве примера не подойдет? Там WTFчик тоже присутствует, ну хоть не велосипед изобретать...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Более одного грида на форме - активное выделение TasmanianDevil DAX: Прочие вопросы 1 29.01.2013 09:43
Обновление записи на форме Katuxa DAX: Программирование 6 15.08.2011 08:35
Периодическое обновление строк в форме DreamCreator DAX: Программирование 6 15.05.2011 17:51
Обновление detail-таблицы DreamCreator DAX: Программирование 1 05.04.2005 15:57
Про два грида на одной форме YVAS DAX: Программирование 4 01.08.2003 10:53
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:37.