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

news2024/11/17 5:23:07

前言

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);
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/676638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dify 基于 ChatGPT 构建本地知识库问答应用

一、Dify 自从 ChatGPT 横空出世之后&#xff0c;其极高的语言理解和交互能力不仅让人惊呼&#xff0c;ChatGPT不仅能够处理事实性问题&#xff0c;还能理解和生成情感色彩更浓厚的对话内容&#xff0c;能够识别用户的情感倾向&#xff0c;并据此作出相应的回应。这么好的东西…

Linux——文件基础IO的文件描述符和重定向理解

目录 前言&#xff1a; 首先来回顾一下open函数&#xff0c;即在进程中同时打开多个文件&#xff1a; Linux底层进程与文件的关系 &#xff1a; 2.1关闭stdin&#xff1a; 运行结果&#xff1a; ​编辑由结果知&#xff1a;fd1指向文本文件cyq.txt&#xff0c;原本fd1是默…

机器学习多步时间序列预测解决方案

近年来&#xff0c;随着机器学习与深度学习的发展机器学习平台的成熟&#xff0c;数据科学家们不再需要关心底层的基础设施及构建复杂的训练与推理环境&#xff0c;从而可以把主要的时间与精力放在数据与算法本身。在机器学习变得更容易的今天&#xff0c;越来越多的传统行业已…

HAL库——STM32CubeMX中断相关配置(中断反转LED状态)

STM32CubeMX中断相关配置 文章目录 STM32CubeMX中断相关配置1. 选择你要用的芯片(双击打开)2. 设置串口写入3. 配置时钟树&#xff0c;外部时钟为系统时钟&#xff08;PLL倍频时钟&#xff09;4. 查看原理图&#xff0c;找到可以中断控制的器件&#xff0c;或者外接小灯来达到中…

中国版chatGPT【文心一言】

文心一言是一款基于人工智能技术的中文自然语言处理工具&#xff0c;它可以用于文本生成、情感分析、关键词提取等多种应用场景。相比于GPT等其他自然语言处理模型&#xff0c;文心一言有着更多的优势。 首先&#xff0c;文心一言具有更高的准确率和可靠性。它采用了最新的深度…

Redis之RDB和AOF持久化原理解析

Redis之RDB和AOF持久化原理解析 一 RDB持久化原理及缺点 说明&#xff1a; 主进程是没法读取物理内存的&#xff0c;所以会在主进程有一个页表来读取物理内存中的数据子进程共享主进程的数据&#xff0c;会复制页表&#xff0c;写入磁盘中写操作是会拷贝一份在进行写操作 二…

【MySql】MySql事务隔离级别与一致性

文章目录 理解隔离性隔离级别查看与设置隔离性读未提交Read Uncommitted读提交Read Committed可重复读 Repeatable Read串行化serializable一致性(Consistency) 理解隔离性 MySQL服务可能会同时被多个客户端进程(线程)访问&#xff0c;访问的方式以事务方式进行 一个事务可能由…

计算机网络——自顶向下方法(第四章学习记录)

本章学习网络层&#xff1a;数据平面 前一章中我们学习了运输层依赖于网络层的主机到主机的通信服务&#xff0c;提供了各种形式的进程到进程的通信。在本章中我们将看到与运输层和应用层不同的是&#xff0c;在网络中的每一台主机和路由器中都有一个网络层部分。 网络层能够…

【FreeRTOS】FreeRTOS学习笔记 ---- 堆和栈,第1个FreeRTOS程序,创建任务函数及任务管理

&#x1f340;作者&#xff1a;阿润菜菜 目录 一、通过故事介绍FreeRTOS1.什么是FreeRTOS&#xff1f;2.FreeRTOS能做什么&#xff1f; 二、如何使用FreeRTOS&#xff1f; --- 第1个FreeRTOS程序三、FreeRTOS的堆和栈1.堆和栈的概念2.堆和栈的分配方式3.堆和栈的溢出检测 四、创…

【创建一个螺旋状的相机轨迹并可视化该轨迹以及每个点的姿态】

文章目录 焦点的作用static const Eigen::Vector3d b_cam_z(0, 0, 1);static const Eigen::Matrix3d R_w_base = (Eigen::Matrix3d() << 0, 0, -1, 1, 0, 0, 0, -1, 0).finished()import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import …

canvas详解03-绘制图像和视频

canvas 更有意思的一项特性就是图像操作能力。可以用于动态的图像合成或者作为图形的背景,以及游戏界面(Sprites)等等。浏览器支持的任意格式的外部图片都可以使用,比如 PNG、GIF 或者 JPEG。你甚至可以将同一个页面中其他 canvas 元素生成的图片作为图片源。 引入图像到 …

canvas详解04-绘制文字

绘制文本 canvas 提供了两种方法来渲染文本: fillText(text, x, y [, maxWidth]) 在指定的 (x,y) 位置填充指定的文本,绘制的最大宽度是可选的。 strokeText(text, x, y [, maxWidth]) 在指定的 (x,y) 位置绘制文本边框,绘制的最大宽度是可选的。 #一个填充文本的示例…

Vue电商项目--购物车操作

购物车动态展示数据 但是这个数据的格式不完美 一层套一层 重新对vuex进行存储处理 这里接口写错 这一块&#xff0c;我们通过计算属性加工一下&#xff0c;重新渲染到页面上 在这里我们考虑一个问题&#xff0c;那就是将计算出来的总值计算到页面上 这里还有一个问题&#x…

qt读写xml文件

Qt使用XML模块&#xff0c;在.pro文件中添加 QT xml Qt 提供了三种读写 XML 文档的方法&#xff1a; QXmlStreamReader/QXmlStreamWriter&#xff1a; 一种快速的基于流的方式访问良格式 XML 文档&#xff0c;特别适合于实现一次解析器&#xff08;所谓“一次解析器”&…

前端vue入门(纯代码)13

【13.Vue的消息订阅与发布】 备注&#xff1a;全局事件总线用的更多些&#xff0c;消息订阅与发布只需了解即可。【注意点1】&#xff1a;由于“消息订阅与发布”可依赖的第三方库太多了&#xff0c;这里使用pubsub-js 问题&#xff1a;“全局事件总线”和“消息订阅与发布”都…

看完这篇 教你玩转渗透测试靶机vulnhub—Emplre: Breakout

Vulnhub靶机Emplre: Breakout渗透测试详解 Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;登入后台&#xff1a;③&#xff1a;GetShell&#xff1a;④…

oracle操作xml格式数据

新建一张用来测试的表 -- Create table create table XMLTEST (id NUMBER,content VARCHAR2(4000) );往表中插入数据 insert into XMLTEST (id, content) values (1, <root><app><id>1</id><name>张三</name><age>18</age…

《网络安全0-100》经典访问控制策略

1经典访问控制策略 1.1自主访问控制 允许用户自己对客体将已有的权限赋予给其他主体&#xff0c;也可以撤销自己赋予给其他主体的权限。 矩阵结构分为三个主要的表&#xff1a; 访问控制矩阵 访问控制列表 权能表 矩阵的局限性&#xff1a; 大小为主体数量客体数量&…

【FPGA】Verilog:时序电路设计 | 自循环移位寄存器 | 环形计数 | 扭环计数 | 约翰逊计数器

前言&#xff1a;本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例&#xff1a;计数器 ​​ 功能特性&#xff1a; 采用 Xilinx Artix-7 XC7A35T芯片 配置方式&#xff1a;USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度 存储器&#xff1a;2Mb…

Bresenham直线算法

文章目录 1.Bresenham直线算法1.1 算法流程1.2 Bresenham算法实现1.3matlab中应用1.4 算法优势1.5 对比以往方法的改进和优化1.6 算法改进和缺陷 2.国内外研究现状3.个人感想及算法改进 1.Bresenham直线算法 Bresenham直线算法是一种用于将两点之间的线段绘制在屏幕上的算法。…