分页Flutter SfDataGrid正在导出所有数据



我正在使用带分页的SfDataGrid,我想导出所有数据,不仅是当前页面,但我无法正确实现。

我当前的代码如下。

final excel.Workbook workbook = excel.Workbook();
for (var i = 0; i < viewModel.pagedRows.length; i++) {
final page = viewModel.pagedRows[i];
final excel.Worksheet worksheet = i == 0 ? workbook.worksheets[0] : workbook.worksheets.addWithName(i.toString());
key.currentState!.exportToExcelWorksheet(worksheet, rows: page);

}
final List<int> bytes = workbook.saveAsStream();
workbook.dispose();
writeToFile('DataGrid.xlsx', bytes);
Share.shareFiles([await getFilePath('DataGrid.xlsx')],
subject: 'Exported Excel',
mimeTypes: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.ms-excel']);

有了这段代码,我可以正确地将分页数据导出到相关的工作表中。但问题是摘要行,因为导出系统在导出时使用当前可见数据网格页面的摘要值,这会导致导出文件中的数据错误。

我认为我应该使用DataGridToExcelConverter并干预导出过程,但我没有找到方法。

睡个好觉后,我解决了我的问题,正如我猜测的那样,它通过使用DataGridToExcelConverter解决了。

CustomDataGridToExcelConverter converter = CustomDataGridToExcelConverter();
final excel.Workbook workbook = excel.Workbook();
workbook.worksheets[0].name = "1";
for (var i = 0; i < viewModel.pagedRows.length; i++) {
final page = viewModel.pagedRows[i];
final excel.Worksheet worksheet = i == 0 ? workbook.worksheets[0] : workbook.worksheets.addWithName((i + 1).toString());
converter.page = i;
key.currentState!.exportToExcelWorksheet(excludeColumns: ['id'], worksheet, rows: page, converter: converter,
cellExport: (details) async {
details.excelRange.cellStyle.hAlign = excel.HAlignType.center;
});
}
final List<int> bytes = workbook.saveAsStream();
workbook.dispose();
writeToFile('excel.xlsx', bytes);

我的CustomDataGridToExcelConverter类在下面

class CustomDataGridToExcelConverter extends DataGridToExcelConverter {
int page = 0;
@override
void exportToExcelWorksheet(SfDataGrid dataGrid, List<DataGridRow>? rows, Worksheet worksheet) {
(dataGrid.source as LogbookViewModel).silentHandlePageChange(page == 0 ? 0 : page - 1, page);
super.exportToExcelWorksheet(dataGrid, rows, worksheet);
}

silentHandlePageChange方法是handlePageChange的替代方法,它不通知侦听器。

void silentHandlePageChange(int oldPageIndex, int newPageIndex) async {
_dataGridRows = _pagedRows[newPageIndex];
_currentPage = newPageIndex;
}

在我看来,分页excel导出应该在框中,但我设法以某种方式

相关内容

  • 没有找到相关文章

最新更新