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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.04.2004, 19:28   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Хорошим тоном при разработке приложения Axapta считается предоставление пользователю возможности обработки нескольких выбранных записей нажатием одной кнопки.

Проблема
Пользователь выбрал несколько записей в Grid'е и Вы хотите, чтобы созданная Вами обработка учитывала этот выбор. Обычно в случае, если выбранных записей нет, обрабатывается только текущая запись.

Решение
Объект класса FormDataSource содержит метод для распознавания ситуации множественного выбора: boolean anyMarked(). Этот метод возвращает true, если пользователь выбрал несколько записей в FormDataSource, используя Shift или Ctrl.

Для перебора выбранных записей в классе FormDataSource есть методы Common getFirst([int _mark = 0, boolean _fetchAhead = true]) и Common getNext(). В случае, если первый аргумент в getFirst не равен 0, этот метод и метод getNext будут последовательно возвращать выбранные записи (иначе будут возвращены все записи в Data Source).

Используя имеющиеся методы, можно организовать цикл с помощью оператора for.

Пример
В форме, в которой имеется Data Source с именем CustTable, имеет смысл следующая часть кода (наиболее вероятно ее появление в методе clicked какой-либо кнопки).
<div class='XPPtop'>X++</div><div class='XPP'>CustTable CustTableEdit;
[color=:green]// ...
[/color][color=:blue]for[/color] (CustTableEdit = CustTable_ds.getFirst(1) [color=:blue]?[/color]  [color=:green]// есть ли помеченные записи -
[/color]                      CustTable_ds.getFirst(1) :  [color=:green]// если есть, взять первую
[/color]                      CustTable;                  [color=:green]// иначе взять текущую
[/color]      CustTableEdit;                              [color=:green]// продолжать до тех пор, пока есть записи для обработки
[/color]      CustTableEdit = CustTable_ds.getNext())     [color=:green]// взять потенциальную следующую запись
[/color]{
   [color=:green]// обработка CustTableEdit
[/color]    [color=:green]// ...
[/color]}</div>
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 06.05.2010, 11:30   #2  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Код:
CustTable CustTableEdit;
// ...
for (CustTableEdit = CustTable_ds.getFirst(1) ?   // есть ли помеченные записи -
                      CustTable_ds.getFirst(1) :  // если есть, взять первую
                      CustTable;                  // иначе взять текущую
      CustTableEdit;                              // продолжать до тех пор, пока есть записи для обработки
      CustTableEdit = CustTable_ds.getNext())     // взять потенциальную следующую запись
{
    // обработка CustTableEdit
    // ...
}
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
 


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

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

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