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

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


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 (внешнее изменение)