首页 > 其他分享 >DataGridView循环刷新、导出为xlsx文件,加载保存json配置文件

DataGridView循环刷新、导出为xlsx文件,加载保存json配置文件

时间:2023-11-09 16:16:13浏览次数:37  
标签:xlsx 配置文件 Text DataGridView json initialize Model public

Winform中的DataGridView控件DataSource属性绑定到数据库,实现循环更新,并且可导出xsxl文件、暂停等功能。

注:使用第三方库有EPPlus(操作Eecel)、Newtonsoft.net(Json序列化/反序列化)、Guna2(控件库)

  • winform布局如下:

  • 创建LoadConFigJson方法:启动应用程序时,加载读取配置文件

 

 1         private void LoadConfigJson()
 2         {
 3             //从文件直接反序列化为Initialize_Model对象
 4             initialize_Model = JsonConvert.DeserializeObject<Initialize_Model>(File.ReadAllText(Environment.CurrentDirectory + "\\Initialize.json"));
 5             //给对象赋值
 6             this.guna2TextBox1.Text = initialize_Model.RefreshCycle.ToString();
 7             this.guna2TextBox2.Text = initialize_Model.DailyOutput.ToString();
 8             this.guna2TextBox3.Text = initialize_Model.MonthlyOutPut.ToString();
 9             this.guna2TextBox4.Text = initialize_Model.QuarterlyOutPut.ToString();
10             //赋值连接字符串
11             sqlConString = initialize_Model.ConnectionString;
12         }

Initialize_Model类如下:

 1     public class Initialize_Model
 2     {
 3         public string ConnectionString { get; set; }
 4 
 5         //如果为1加载初始化json,2加载保存json
 6         public int Status { get; set; }
 7         public int RefreshCycle { get; set; }
 8         public int DailyOutput { get; set; }
 9         public int MonthlyOutPut { get; set;}
10         public int QuarterlyOutPut { get; set; }
11     }
  • DataGridView循环刷新方法

 1         private void CyclicRefreshing()
 2         {
 3             Task task = Task.Run(async () =>
 4             {
 5                 while (!token.IsCancellationRequested)
 6                 {
 7                     resetEvent.WaitOne();//事件如果被触发,程序暂停此位置
 8                     Action action = () =>
 9                     {
10 
11                         DataTable dataTable = Dbhelp.Query(this.sqlConString);
12                         this.guna2DataGridView1.DataSource = dataTable;
13                     };
14                     this.Invoke(action);
15                     //循环刷新周期为2s
16                     await Task.Delay(2000);
17                 }
18             }, this.token);
19 
20         }

 

  • 创建SaveConfigJson方法:应用程序关闭时,保存修改的值到配置文件中

 1         private void SaveConfigJson()
 2         {
 3             initialize_Model.RefreshCycle = Convert.ToInt32(this.guna2TextBox1.Text.Trim());
 4             initialize_Model.DailyOutput = Convert.ToInt32(this.guna2TextBox2.Text.Trim());
 5             initialize_Model.MonthlyOutPut = Convert.ToInt32(this.guna2TextBox3.Text.Trim());
 6             initialize_Model.QuarterlyOutPut = Convert.ToInt32(this.guna2TextBox4.Text.Trim());
 7             initialize_Model.Status = 2;
 8             //序列化字符串直接写入到json文件中
 9             File.WriteAllText(Environment.CurrentDirectory + "\\SaveConfig.json", JsonConvert.SerializeObject(initialize_Model, Formatting.Indented));
10         }
  • 声明字段,窗体构造函数、窗体Load处理函数、窗体关闭处理函数

 1     public partial class Form1 : Form
 2     {
 3         //初始化类
 4         Initialize_Model initialize_Model;
 5         //数据库连接字符串
 6         string sqlConString;
 7         //Excel保存路径
 8         string excelPathStr;
 9         //Task取消令牌
10         CancellationTokenSource cancellationSource;
11         CancellationToken token;
12         //初始化配置文件状态
13         bool button1Status = false;
14         //手动复位事件(用于暂停Task任务)
15         ManualResetEvent resetEvent;
16         public Form1()
17         {
18             InitializeComponent();
19             cancellationSource = new CancellationTokenSource();
20             token = cancellationSource.Token;
21             resetEvent = new ManualResetEvent(true);//首次传入为True,task任务不会暂停
22         }
23 
24         private void Form1_Load(object sender, EventArgs e)
25         {
26             LoadConfigJson();   //加载json配置文件
27             CyclicRefreshing(); //启动DataGridView循环刷新任务
28         }
29         private void Form1_FormClosing(object sender, FormClosingEventArgs e)
30         {
31             SaveConfigJson(); //调用保存配置文件代码
32         }
  • 暂停DataGridView刷新

 1         private void guna2Button1_Click(object sender, EventArgs e)
 2         {
 3             if (button1Status == false)
 4             {
 5                 resetEvent.Reset(); //触发暂停
 6                 button1Status = true;
 7             }
 8             else
 9             {
10                 resetEvent.Set();  //继续运行
11                 button1Status = false;
12             }
13 
14         }
  • 导出DataGridView的DataSource到xlsx表格

 1         //导出DataGridView到Excel表格
 2         private void guna2ImageButton1_Click(object sender, EventArgs e)
 3         {
 4             //说明EPPlus不为商用
 5             ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
 6             //声明保存当前路径的字符串
 7             string CurrentPath;
 8             //打开folderBrowserDialog窗口
 9             if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
10             {
11                 //判断选择路径不为空
12                 if (folderBrowserDialog1.SelectedPath != null)
13                 {
14                     excelPathStr = folderBrowserDialog1.SelectedPath.ToString();//选择的文件夹路径赋值给excel保存的路径
15                     CurrentPath = excelPathStr + $"\\{System.DateTime.Now.ToString("yyyy mm dd HH mm ss")}.xlsx";
16                     //加载excel包,作为操作excel的入口
17                     using (ExcelPackage package = new ExcelPackage(CurrentPath))
18                     {
19                         var sheet = package.Workbook.Worksheets.Add("TestSheet");
20                         sheet.Cells["A1"].LoadFromDataTable((DataTable)this.guna2DataGridView1.DataSource, true, TableStyles.Dark1);
21                         package.Save();
22                     }
23                     if (File.Exists(CurrentPath))
24                     {
25                         MessageBox.Show("表格导出成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
26                     }
27                     else
28                     {
29                         MessageBox.Show("表格导出失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
30                     }
31                 }
32             }
33         }

 

标签:xlsx,配置文件,Text,DataGridView,json,initialize,Model,public
From: https://www.cnblogs.com/davisdabing/p/17821895.html

相关文章

  • 使用 @ConfigurationProperties 初始化static配置文件变量
    重点设置静态属性必须添加非静态set方法不然会读取配置文件失败还有就是prefix只支持小写配置文件项如下 配置文件packagecom.mingx.drone.config;importlombok.Data;importorg.springframework.boot.context.properties.ConfigurationProperties;importorg.spr......
  • DataGridView绑定数据之后如何修改列值
    privatevoiddataGridView1_CellFormatting(objectsender,DataGridViewCellFormattingEventArgse){if(e==null||e.Value==null||!(senderisDataGridView))return;DataGridViewview=(DataGridView)send......
  • 软件测试|如何在Pycharm中配置文件头部信息
    简介PyCharm是一款功能强大的Python集成开发环境(IDE),在开发过程中,我们经常需要在代码文件的开头添加固定的文件说明信息,例如版权声明、作者信息、创建日期等。手动添加这些信息可能会很繁琐,但是PyCharm提供了一个方便的功能,可以自动生成固定文件说明信息。本文将详细介绍在PyChar......
  • Redis配置文件详解
    Redis的配置文件redis.conf过滤掉空行和注释行,总共有49个可控项。1daemonizeno默认情况下,redis不是后台运行,如果需要后台运行,把该项的值改为yes。2pidfile当Redis在后台运行的时候,Redis默认会把pid文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis服务时,需......
  • c# 操作xml配置文件
     Xml配置文件<?xmlversion="1.0"encoding="utf-8"?><root><tokenStrvalue=""/><overTimevalue=""></overTime></root>Helper类//读取stringuri=Enviro......
  • 前端实现Excel导出【xlsx】【xlsx-js-style】
    最终效果场景有的时候我们需要根据服务端返回的数据来导出excel表格优化一:设置单元格样式比如:可以调节背景色、字体样式、borderxlsx基础库不提供样式设置,可以使用xlsx-js-style库,这个库是xlsx库的fork版本,并添加了样式定义详细样式可以查看https://github.com/gitbrent/xl......
  • qt 配置文件 settings
     Qt如何读取和写入配置文件的数据呢?_qt配置文件读写-CSDN博客 这篇写的很好,照着做成功了,能读写配置文件配置文件的路径在构造函数中设置。Qt使用QSetting对ini配置文件进行读取和写入_.ini文件读写qsetting-CSDN博客......
  • DataGridView的AutoGenerateColumns控制显示列
    在用C#的EF框架进行数据显示的时候出现了DataGridView显示未编辑列的问题,后来发现通过对DataGridView的 AutoGenerateColumns属性进行定义借可以解决AutoGenerateColumns属性默认未true,此时会显示所有,更改为false就可以了(此属性只能后台操控,代码加载main方法里)this.UsersDGV.......
  • SpringBoot获取配置文件-@Value、@ConfigurationProperties方式
    配置文件yml#phantomjs的位置地址phantomjs:binPath:windows:binPath-winlinux:binPath-linuxjsPath:windows:jsPath-winlinux:jsPath-linuximagePath:windows:imagePath-winlinux:imagePath-linuxphantomjs2:binPath2:I‘......
  • 文件名: ?Ciwindows\system32 inetsrconfiglapplicationHost.config 错误:无法写入配
    出现原因:出现这个问题,一般是在程序运行的时候更新程序,导致的.解决方案:MicrosoftWindows[版本6.3.9600](c)2013MicrosoftCorporation。保留所有权利。C:\Users\Administrator>netstopiisadmin/yIISAdminService服务正在停止....IISAdminService服务已成功停......