Раздел: [[Программирование | ]] > [[РаботаСБазойДанных]]
----
BestPractices рекомендует следующий способ обойти все строки [[Класс/FormDataSource]], выделенные в [[Grid | ]] (раздел "Traversing multi selected records in a data source"):
void clicked()
{
xRefReferences xRefReferencesEdit;
// есть ли выделенные строки -
for (xRefReferencesEdit = xRefReferences_ds.getFirst(1) ?
xRefReferences_ds.getFirst(1) : //если есть, получаем первую
xRefReferences; //иначе используем текущую запись
// продолжаем, пока получаем записи
xRefReferencesEdit;
// выбираем следующую запись
xRefReferencesEdit = xRefReferences_ds.getNext())
{
// обработка xRefReferencesEdit
...
}
}
К данной записи приложен [[file:!/Sys_FormDataSourceSelectionEnumerator.7z]], который инкапсулирует этот алгоритм перебора
SYS_FormDataSourceSelectionEnumerator i = new SYS_FormDataSourceSelectionEnumerator(EmplTable_ds)
while (i.moveNext())
info(int2str(i.current().recID));
=== Обработка набора записей, переданных через Args ===
Если надо перебирать набор записей в классе, вызванным из MenuItem, FormDataSource можно получить так:
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
...
}
}