【Syncfusion系列】SfDataGrid 轻松实现分页和Excel导出

前言

Syncfusion 封装了一个控件 SfDataGrid ,通过SfDataGrid我们只需要 极少量 代码就能分页和Excel导出。

效果展示

包安装

安装下面三个包

将表格绑定到数据库 

这次我使用的是一个本地的小型数据库:sqlit

 我通过 sqlit-net 这个包 进行访问 sqlit数据库

 这个包的使用方法就不具体说明了。

SfDataGrid  的数据源可以直接和 ObservableCollection 的类型的数据进行绑定。这就很方便。

所以我先构建一个数据源:

private ObservableCollection<ColorDataTabel> colorDataSource = new ObservableCollection<ColorDataTabel>();
public ObservableCollection<ColorDataTabel> ColorDataSource
{
	get
	{
		//colorDataSource = GetListLimit();
		return colorDataSource;
	}
	set
	{
		SetProperty(ref colorDataSource, value);
	}
}

其实的ColorDataTabel,就是数据表的结构,这里我的表结构是这样的:

 public class ColorDataTabel
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }

        //时间
        public string createTime { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

        public decimal L { get; set; }
        public decimal A { get; set; }
        public decimal B { get; set; }

        public string Result { get; set; } = "";

        public decimal _400nm { get; set; }
        public decimal _410nm { get; set; }
        public decimal _420nm { get; set; }
        public decimal _430nm { get; set; }
        public decimal _440nm { get; set; }
        public decimal _450nm { get; set; }
        public decimal _460nm { get; set; }
        public decimal _470nm { get; set; }
        public decimal _480nm { get; set; }
        public decimal _490nm { get; set; }
        public decimal _500nm { get; set; }
        public decimal _510nm { get; set; }
        public decimal _520nm { get; set; }
        public decimal _530nm { get; set; }
        public decimal _540nm { get; set; }
        public decimal _550nm { get; set; }
        public decimal _560nm { get; set; }
        public decimal _570nm { get; set; }
        public decimal _580nm { get; set; }
        public decimal _590nm { get; set; }
        public decimal _600nm { get; set; }
        public decimal _610nm { get; set; }
        public decimal _620nm { get; set; }
        public decimal _630nm { get; set; }
        public decimal _640nm { get; set; }
        public decimal _650nm { get; set; }
        public decimal _660nm { get; set; }
        public decimal _670nm { get; set; }
        public decimal _680nm { get; set; }
        public decimal _690nm { get; set; }
        public decimal _700nm { get; set; }


    }

有了数据源,我们就可以对数据进行绑定了:

<sf:SfDataGrid EnableDataVirtualization="True"
   ItemsSource="{Binding ColorDataSource}"
   ColumnSizer="Auto"/>

这样就将表格和数据源绑定好了,数据源中的变量名称就是表格列,值对应就是表格Cell中的值:

但是这样,是没有分页的,没有分页会导致什么问题呢?一来是查看不是很方便,而是界面渲染会十分慢,这个几乎不能忍,我试了下,2000行数据显示需要好几分钟渲染。(一开始我以为是查询的速度不行,还真是冤枉sqlit,查询速度其实只有几十毫秒,耗时是界面的渲染

那分页实现代码如下:

<sf:SfDataGrid EnableDataVirtualization="True"
		ItemsSource="{Binding ElementName=dataPager,Path=PagedSource}"
		ColumnSizer="Auto"/>
<sf:SfDataPager x:Name="dataPager"
	Grid.Row="2"
	PageSize="15"
	Source="{Binding ColorDataSource}"/>

这需要添加一个控件SfDataPager ,让它取绑定数据源,然后SfDataGrid 的 ItemsSource 关联到SfDataPager的PagedSource属性,这样分页就完成了!PageSize就是确定每一页的大小。

根本不需要你写任何逻辑代码,分页就帮你实现了是不是很酷!

Excel导出

导出Excel也是非常的简单

void ExportToExcel()
{
    try
    {
        var options = new ExcelExportingOptions();
        options.ExcelVersion = ExcelVersion.Excel2013;
        var excelEngine = gridData.ExportToExcel(gridData.View, options);
        var workBook = excelEngine.Excel.Workbooks[0];
        var f = OpenDialog.SaveFileDialog("xlsx", DateTime.Now.ToString("D"));
        workBook.SaveAs(f);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

没分页之前,这段代码没啥问题,但是分页之后,就会出现一个问题,导出的只有当前的分页内容:

需要再加一个配置:options.ExportAllPages = true;

void ExportToExcel()
{
    try
    {
        var options = new ExcelExportingOptions();
        options.ExcelVersion = ExcelVersion.Excel2013;
        options.ExportAllPages = true;
        var excelEngine = gridData.ExportToExcel(gridData.View, options);
        var workBook = excelEngine.Excel.Workbooks[0];
        var f = OpenDialog.SaveFileDialog("xlsx", DateTime.Now.ToString("D"));
        workBook.SaveAs(f);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

这样就能导出全部分页内容了!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Flutter应用程序中导出Excel文件并在其中显示图片,你可以使用syncfusion_flutter_xlsio插件。该插件支持将文本和图片写入Excel文件。首先,你需要将在线图片地址转换为Uint8List格式。你可以使用dio库下载图片并将其转换为Uint8List,然后使用syncfusion_flutter_xlsio插件将其写入Excel文件中。以下是一个示例代码: ``` import 'dart:io'; import 'package:image/image.dart' as imgLib; import 'package:dio/dio.dart'; import 'dart:convert'; import 'package:syncfusion_flutter_xlsio/xlsio.dart' as Flutter_xlsio; import 'package:path_provider/path_provider.dart' as path_provider; Future<Uint8List> downloadImage(String imageUrl) async { Dio dio = Dio(); Response response = await dio.get(imageUrl, options: Options(responseType: ResponseType.bytes)); return response.data; } void exportExcelWithImage() async { // 创建一个新的Excel文档 Flutter_xlsio.Workbook workbook = Flutter_xlsio.Workbook(); Flutter_xlsio.Worksheet sheet = workbook.worksheets[0]; // 下载并转换图片 Uint8List imageBytes = await downloadImage('https://example.com/image.jpg'); imgLib.Image image = imgLib.decodeImage(imageBytes); imgLib.Image resizedImage = imgLib.copyResize(image, width: 100, height: 100); Uint8List resizedImageBytes = imgLib.encodeJpg(resizedImage); // 将图片插入Excel文件 sheet.insertImage(1, 1, resizedImageBytes); // 保存Excel文件 String filePath = (await path_provider.getTemporaryDirectory()).path + '/exported_excel.xlsx'; await workbook.saveAs(filePath); print('Excel文件已导出到:$filePath'); } exportExcelWithImage(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code bean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值