Инструменты пользователя

Инструменты сайта


axapta:переборвыделенныхстрок

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

axapta:переборвыделенныхстрок [2018/04/13 22:43] (текущий)
Строка 1: Строка 1:
 +Раздел:​ [[Программирование | ]] > [[РаботаСБазойДанных]]
 +----
 +BestPractices рекомендует следующий способ обойти все строки [[Класс/​FormDataSource]],​ выделенные в [[Grid | ]] (раздел ​ "​Traversing multi selected records in a data source"​):​
 +<code xpp>
 +void clicked() ​
 +{
 +    xRefReferences xRefReferencesEdit;​
 +    // есть ли выделенные строки -
 +    for (xRefReferencesEdit = xRefReferences_ds.getFirst(1) ?
 +            xRefReferences_ds.getFirst(1) : //если есть, получаем первую
 +            xRefReferences; ​                //​иначе используем текущую запись
 +        // продолжаем,​ пока получаем записи
 +         ​xRefReferencesEdit;​
 +        // выбираем следующую запись
 +        xRefReferencesEdit = xRefReferences_ds.getNext())
 +    {
 +        // обработка xRefReferencesEdit
 +        ...
 +    }
 +}
 +</​code>​
  
 +К данной записи приложен [[file:​!/​Sys_FormDataSourceSelectionEnumerator.7z]],​ который инкапсулирует этот алгоритм перебора
 +<code xpp>
 +SYS_FormDataSourceSelectionEnumerator i = new SYS_FormDataSourceSelectionEnumerator(EmplTable_ds)
 +while (i.moveNext())
 +      info(int2str(i.current().recID));​
 +</​code>​
 +
 +=== Обработка набора записей,​ переданных через Args ===
 +
 +Если надо перебирать набор записей в классе,​ вызванным из MenuItem, FormDataSource можно получить так:
 +<code xpp>
 +static void main(Args _args)
 +{
 +     ​FormDataSource ds=_args.record().dataSet();​
 +     ​EmplTable empl;
 +;
 +    // есть ли выделенные строки -
 +    for (empl = ds.getFirst(1) ? ds.getFirst(1) : _args.record(); ​ empl; empl  = ds.getNext())
 +    {
 +        // обработка empl
 +        ...
 +    }
 +}
 +</​code>​
axapta/переборвыделенныхстрок.txt · Последние изменения: 2018/04/13 22:43 (внешнее изменение)