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
 


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

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

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