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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2007, 22:27   #1  
Jackally is offline
Jackally
Участник
 
20 / 14 (1) ++
Регистрация: 08.08.2006
Как программно узнать количество промаркированных строк в гриде?
Как программно узнать количество промаркированных строк в гриде?
Кроме пробега по датасорсу с помощью getNext() и подсчета записей, есть еще более оптимальные и шустрые варианты?
Старый 19.12.2007, 22:30   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Насколько мне известно, нет. А кто сказал, что getNext() неоптимален? Мы же к базе данных не обращаемся и даже на сервер не идем.
Старый 19.12.2007, 22:57   #3  
Jackally is offline
Jackally
Участник
 
20 / 14 (1) ++
Регистрация: 08.08.2006
Но когда промаркированно несколько десятков тысяч записей, запрос на сервере отработает побыстрее (
Старый 19.12.2007, 23:07   #4  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
Сообщение от Jackally Посмотреть сообщение
Но когда промаркированно несколько десятков тысяч записей, запрос на сервере отработает побыстрее (
Запрос? Откуда сервер знает о промаркированных на клиенте строках грида?
Чем занимается могучий пользователь, маркирующий несколько десятков тысяч записей?
__________________
-ТСЯ или -ТЬСЯ ?
Старый 19.12.2007, 23:11   #5  
Jackally is offline
Jackally
Участник
 
20 / 14 (1) ++
Регистрация: 08.08.2006
сервер как раз не знает. Записей очень много, и их надо обработать, я подсчитываю их количество для прогресс бара, тем самым убиваю "клиента", как их можно шустро посчитать?
Старый 19.12.2007, 23:25   #6  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Храните отдельно в Set или Map признак маркированности.Однако, вопрос "Чем занимается могучий пользователь, маркирующий несколько десятков тысяч записей?" остается открытым.Вы же не хотите сказать, что пользователь потом будет просматривать все эти записи и снимать маркировку с некоторых из них?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 19.12.2007, 23:29   #7  
Jackally is offline
Jackally
Участник
 
20 / 14 (1) ++
Регистрация: 08.08.2006
Под маркировкой я имею ввиду "выделение", пользователь может нажать Ctrl+A и нажать "обработку"
Старый 20.12.2007, 08:44   #8  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от Jackally Посмотреть сообщение
Под маркировкой я имею ввиду "выделение", пользователь может нажать Ctrl+A и нажать "обработку"
Ну так это же значит все записи выделил и count() Вам поможет
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 20.12.2007, 09:24   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Jackally

Да не заморачивайтесь этим прогрессбаром в плане подсчёта количества строк. Ведь сами рассудите: пользователя не интересует точное конкретное количество отработанных строк. Всё равно он на запущенный процесс уже никак не повлияет. Разве что может отменить. Пользователя в первую очередь интересует не завис ли процесс, который обрабатывает эти строки. Как вариант, отобразите анимированную иконку, что процесс всё ещё идёт. Или воспользуйтесь тем же прогрессбаром, по установите максимальное ему(прогрессбару) число, например 20000. Пользователь будет видеть что процесс идёт.

Посвятите себя более полезным задачам

Вместо 20000 можете это прописать
X++:
    QueryRun        queryRun;
    queryRun = new QueryRun(table_ds.query());
    element.progressInit("бла-бла", SysQuery::countLoops(queryRun), #AviUpdate,1, 1);
countLoops(queryRun) вернёт количество строк в квериране, а оно всегда будет больше, чем пользователь выделил. Ничего страшного не случится, если процесс завершится раньше, чем прогрессбар дойдёт до конца. Хотя в случае десятков тысяч строк в queryRun countLoops() конечно будет пригружаться

Так что всё же прописывайте большую константу и не заморачивайтесь.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню

Последний раз редактировалось Russland; 20.12.2007 в 09:55.
Старый 20.12.2007, 10:17   #10  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Если пользователь(код) маркирует строки, то в момент маркировки запомнить маркировку в Map или Set.
Старый 20.12.2007, 11:21   #11  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
При выделении через Ctrl+A большого количества строк можно столкнуться с проблемой, такой, что при обработке не все строки будут обработаны. У нас так было. Причина возможно в том, что в датасорс не фетчатся все строки из запроса, Аксапта по мере надобности их подгружает. А getNext() видимо работает с уже загруженными строками.

ЗЫ. Наверняка все наблюдали данный эффект при копировании в буфер обмена больших объемов строк из грида, иногда копируется строк меньше чем надо.
Старый 20.12.2007, 18:16   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Jackally Посмотреть сообщение
Под маркировкой я имею ввиду "выделение", пользователь может нажать Ctrl+A и нажать "обработку"
При нажатии "обработки" сделайте дополнительную формочку-запрос с переключателем: Обработать все строки или только выделенные.

Если "Все" - запрос к серверу на количество записей (select count(recId))
Если "Только выделенные" - подсчет по getNext()
Старый 24.12.2007, 17:16   #13  
Jackally is offline
Jackally
Участник
 
20 / 14 (1) ++
Регистрация: 08.08.2006
Всем спасибо, забил на прогресс бар ))
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Количество строк в Query Владимир Максимов DAX: Программирование 19 11.08.2014 18:27
Предельное количество строк в Report Владимир Максимов DAX: Программирование 1 22.12.2005 15:02
Маркировка строк в гриде DreamCreator DAX: Программирование 8 09.06.2005 14:10
Количество строк на страницу Berkoff DAX: Программирование 2 26.10.2004 10:30
Как подсчитать количество строк в отчете ATimTim DAX: Программирование 2 21.09.2004 13:44
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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