|
08.09.2009, 16:18 | #1 |
Axapta Retail User
|
Цитата:
Сообщение от Gustav
Простенький статический метод. Без больших претензий. Построчно выводит в буфер текстовые представления значений (valueStr) контролов грида (со строкой заголовков). Не умеет работать с выделенными строками, но учитывает сортировку, фильтрацию, перестановку и скрытие колонок пользователем. И нумерует строчки - о как! Может быть помещен, например, в Global или аналогичный класс - набор утилит (у меня такой класс называется KKu - я предпочитаю не портить фирменный Global ).
X++: static TextBuffer gridToBuffer( FormRun _formRun, str _gridName, str _separator = '\t') { FormGridControl grid; FormControl control; FormDataSource formDataSource; Common common; int i; int row; str lineToBuffer; TextBuffer textBuffer = new TextBuffer(); //+ для работы с FormGroupControl в гриде FormGroupControl groupCtrl; FormControl controlGrp; int j; //- для работы с FormGroupControl в гриде ; grid = _formRun.design().controlName(_gridName); // заголовки колонок (label) -> вывод в буфер lineToBuffer = strfmt('%1%2', 'Row', _separator); for (i=1; i<=grid.controlCount(); i++) { control = grid.controlNum(i); //+ для работы с FormGroupControl в гриде if(classIdGet(control) == classnum(FormGroupControl)) { groupCtrl = control; if(groupCtrl.isVisible()) { for(j=1; j<=groupCtrl.controlCount(); j++) { controlGrp = groupCtrl.controlNum(j); if (controlGrp.isDisplayed()) { lineToBuffer += strFmt('%1%2', controlGrp.labelText(), _separator); } } } } else //- для работы с FormGroupControl в гриде if (control.isDisplayed()) { lineToBuffer += strFmt('%1%2', control.labelText(), _separator); } } lineToBuffer = subStr( lineToBuffer, 1, strLen(lineToBuffer)-strLen(_separator) ); textBuffer.appendText( lineToBuffer + '\n' ); // ищем датасорс грида for (i=1; i<=_formRun.dataSourceCount(); i++) { if (_formRun.dataSource(i).id() == grid.dataSource()) { formDataSource = _formRun.dataSource(i); break; } } // неявный цикл по строкам грида (явный - по датасорсу) row = 0; for ( common = formDataSource.getFirst() ? formDataSource.getFirst() : formDataSource.cursor(); common ; common = formDataSource.getNext() ) { row++; if (row==1) { formDataSource.first(); } else { formDataSource.next(); } // очередная строка -> вывод в буфер lineToBuffer = strFmt('%1%2', row, _separator); for (i=1; i<=grid.controlCount(); i++) { control = grid.controlNum(i); //+ для работы с FormGroupControl в гриде if(classIdGet(control) == classnum(FormGroupControl)) { groupCtrl = control; if(groupCtrl.isVisible()) { for(j=1; j<=groupCtrl.controlCount(); j++) { controlGrp = groupCtrl.controlNum(j); if (controlGrp.isDisplayed()) { lineToBuffer += strFmt('%1%2', strReplace(strReplace( controlGrp.valueStr(), '\n',' '), '\r',' '), _separator); } } } } else //- для работы с FormGroupControl в гриде if (control.isDisplayed()) { lineToBuffer += strFmt('%1%2', strReplace(strReplace( control.valueStr(), '\n',' '), '\r',' '), _separator); } } lineToBuffer = subStr( lineToBuffer, 1, strLen(lineToBuffer)-strLen(_separator) ); textBuffer.appendText( lineToBuffer + '\n' ); } return textBuffer; } |
|
|
За это сообщение автора поблагодарили: Gustav (7). |