持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
优化
本章节主要对软件进行优化,主要包含以下几点:
- 历史数据增加excel导出
- 实现侧边栏隐藏
- 增加软件logo
增加软件logo
logo增加比较简单,制作一个ico格式的图片,再工程的属性中选择ico即可
另外,需要把我们主窗口的ico同样替换成这个logo图片,启动后结果如下图:
实现侧边栏隐藏
侧边栏的隐藏,需要修改mianform.cs
我们之前在设计框架的时候,在侧边栏和工作区中间预留了一个panel,基于这个panel,实现点击panel后:侧边栏隐藏,再点击后,侧边栏展现。
在panel上添加lable,用于文字提示
修改panel的size,width设置为25
放置一个lable到panel,docker:fill,autosize:false
完成如下图:
实现点击lable的回调函数,比较简单,通过部件的hide实现,code如下:
/// <summary>
/// 隐藏侧边栏
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void label1_Click(object sender, EventArgs e)
{
if (ShowLeftBar)
{
this.treeView1.Hide();
ShowLeftBar = false;
this.label1.Text = ">>>>>>>>>>";
}
else
{
this.label1.Text = "<<<<<<<<<<";
this.treeView1.Show();
ShowLeftBar = true;
}
}
效果如下:
展开:
隐藏:
历史数据增加excel导出
增加excel导出功能
在common文件夹下,新增数据导出类,dataexp.cs
安装nuget包:npio用来导出excel
实现导出函数:
using System;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
namespace THSensor
{
internal class DataExp
{
/// <summary>
/// 将DataTable(DataSet)导出到Execl文档
/// </summary>
/// <param name="dataSet">传入一个DataSet</param>
/// <param name="Outpath">导出路径(可以不加扩展名,不加默认为.xls)</param>
/// <returns>返回一个Bool类型的值,表示是否导出成功</returns>
/// True表示导出成功,Flase表示导出失败
public static bool DataTableToExcel(DataSet dataSet, string Outpath)
{
bool result = false;
try
{
if (dataSet == null || dataSet.Tables == null || dataSet.Tables.Count == 0 || string.IsNullOrEmpty(Outpath))
throw new Exception("输入的DataSet或路径异常");
int sheetIndex = 0;
//根据输出路径的扩展名判断workbook的实例类型
IWorkbook workbook = null;
string pathExtensionName = Outpath.Trim().Substring(Outpath.Length - 5);
if (pathExtensionName.Contains(".xlsx"))
{
workbook = new XSSFWorkbook();
}
else if (pathExtensionName.Contains(".xls"))
{
workbook = new HSSFWorkbook();
}
else
{
Outpath = Outpath.Trim() + ".xls";
workbook = new HSSFWorkbook();
}
//将DataSet导出为Excel
foreach (DataTable dt in dataSet.Tables)
{
sheetIndex++;
if (dt != null && dt.Rows.Count > 0)
{
ISheet sheet = workbook.CreateSheet(string.IsNullOrEmpty(dt.TableName) ? ("sheet" + sheetIndex) : dt.TableName);//创建一个名称为Sheet0的表
//行数
int rowCount = dt.Rows.Count;
//列数
int columnCount = dt.Columns.Count;
//设置列头
//excel第一行设为列头
IRow row = sheet.CreateRow(0);
for (int c = 0; c < columnCount; c++)
{
ICell cell = row.CreateCell(c);
cell.SetCellValue(dt.Columns[c].ColumnName);
}
//设置每行每列的单元格,
for (int i = 0; i < rowCount; i++)
{
row = sheet.CreateRow(i + 1);
for (int j = 0; j < columnCount; j++)
{
//excel第二行开始写入数据
ICell cell = row.CreateCell(j);
double value;
if (double.TryParse(dt.Rows[i][j].ToString(), out value))
cell.SetCellValue(value);
else
cell.SetCellValue(dt.Rows[i][j].ToString());
}
}
}
}
//向outPath输出数据
using (FileStream fs = File.OpenWrite(Outpath))
{
//向打开的这个xls文件中写入数据
workbook.Write(fs);
result = true;
}
return result;
}
catch (Exception ex)
{
MyLogger._.Error(ex.Message + ex.StackTrace);
return false;
}
}
}
}
修改界面
界面修改tablelayoutpanle,增加两行,一行5,一行40
在最后一列放置一个按钮,用来实现数据导出
实现数据导出的回调:
/// <summary>
/// 数据导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
DataSet dtset = new DataSet();
DataTable temp = DataBuffer.Copy();
dtset.Tables.Add(temp);
//导出
string filename = $"{AppDomain.CurrentDomain.BaseDirectory}Output\\outputdata.xls";
if (!DataExp.DataTableToExcel(dtset, filename))
{
MessageBox.Show("导出失败");
return;
}
if (MessageBox.Show("导出成功\r\n是否打开目录?", "Confirm Message", MessageBoxButtons.OKCancel) == DialogResult.OK)
{
//MessageBox.Show(path);
System.Diagnostics.Process.Start("Explorer.exe", filename);
}
}
测试结果
导出后的数据: