From 12e606635c42ea20f4b7c2bdda5204237a4b4c96 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 02 三月 2026 16:14:49 +0800
Subject: [PATCH] 优化
---
HMI.DataViewer/DataViewer.xaml.cs | 252 ++++++++++++++++++++++++++++++++++---------------
1 files changed, 173 insertions(+), 79 deletions(-)
diff --git a/HMI.DataViewer/DataViewer.xaml.cs b/HMI.DataViewer/DataViewer.xaml.cs
index e6dafc7..283734b 100644
--- a/HMI.DataViewer/DataViewer.xaml.cs
+++ b/HMI.DataViewer/DataViewer.xaml.cs
@@ -2,22 +2,40 @@
using HMI.Core.Util;
using HMI.DataViewer.Entity;
using HMI.UI.Util;
+using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
+using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Controls.Primitives;
+using System.Windows.Data;
using System.Windows.Forms;
-using System.Windows.Media;
namespace HMI.DataViewer
{
+ public class DefaultValueConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is DateTime date)
+ {
+ return date.ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ return value.ToString();
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ return value;
+ }
+ }
+
/// <summary>
/// UserControl1.xaml 鐨勪氦浜掗�昏緫
/// </summary>
@@ -27,6 +45,7 @@
{
DataContext = this;
InitializeComponent();
+ DefaultDate();
}
private string SourceFilePath;
@@ -46,6 +65,8 @@
}
private Dictionary<string, DataBase_Setting> Map = new Dictionary<string, DataBase_Setting>();
+
+ private IValueConverter defaultConverter = new DefaultValueConverter();
private void Button_Click(object sender, RoutedEventArgs e)
{
@@ -141,10 +162,16 @@
}
}
+ private void DefaultDate()
+ {
+ var now = DateTime.Now;
+ startTimeInput.SelectedDateTime = DateTime.Parse(now.ToString("yyyy-MM-dd"));
+ endTimeInput.SelectedDateTime = DateTime.Parse(now.AddDays(1).ToString("yyyy-MM-dd"));
+ }
+
private void ResetDataTable()
{
- startTimeInput.SelectedDateTime = null;
- endTimeInput.SelectedDateTime = null;
+ DefaultDate();
dataTable.ItemsSource = null;
foreach (var data in Datas)
{
@@ -176,7 +203,7 @@
Map.Clear();
foreach (var data in settings)
{
- Map.Add(data.Program, data);
+ Map[data.Program] = data;
names.Add(data.Program);
}
programInput.ItemsSource = names;
@@ -256,7 +283,10 @@
DataGridTextColumn textColumn = new DataGridTextColumn
{
Header = header,
- Binding = new System.Windows.Data.Binding(bindingPath),
+ Binding = new System.Windows.Data.Binding(bindingPath)
+ {
+ Converter = defaultConverter
+ },
Width = new DataGridLength(1, DataGridLengthUnitType.Star)
};
dataTable.Columns.Add(textColumn);
@@ -265,53 +295,58 @@
private void dataTable_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
- // 鑾峰彇鐐瑰嚮鐨勫厓绱�
- DependencyObject dep = (DependencyObject)e.OriginalSource;
+ //// 鑾峰彇鐐瑰嚮鐨勫厓绱�
+ //DependencyObject dep = (DependencyObject)e.OriginalSource;
- // 閬嶅巻鎵惧埌 DataGridColumnHeader
- while (dep != null && !(dep is DataGridColumnHeader) && !(dep is DataGridRow))
- {
- dep = VisualTreeHelper.GetParent(dep);
- }
- HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
+ //// 閬嶅巻鎵惧埌 DataGridColumnHeader
+ //while (dep != null && !(dep is DataGridColumnHeader) && !(dep is DataGridRow))
+ //{
+ // dep = VisualTreeHelper.GetParent(dep);
+ //}
+ //HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
- if (dep is DataGridColumnHeader columnHeader)
- {
- // 鑾峰彇鍒楃储寮�
- int columnIndex = columnHeader.Column.DisplayIndex;
+ //if (dep is DataGridColumnHeader columnHeader)
+ //{
+ // // 鑾峰彇鍒楃储寮�
+ // int columnIndex = columnHeader.Column.DisplayIndex;
- // 娓呴櫎宸叉湁閫夋嫨
- dataTable.SelectedCells.Clear();
+ // // 娓呴櫎宸叉湁閫夋嫨
+ // dataTable.SelectedCells.Clear();
- // 閬嶅巻鎵�鏈夎锛岄�変腑璇ュ垪鐨勬墍鏈夊崟鍏冩牸
- foreach (var item in dataTable.Items)
- {
- DataGridCellInfo cellInfo = new DataGridCellInfo(item, columnHeader.Column);
- dataTable.SelectedCells.Add(cellInfo);
- }
- HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, columnHeader.Column);
+ // // 閬嶅巻鎵�鏈夎锛岄�変腑璇ュ垪鐨勬墍鏈夊崟鍏冩牸
+ // foreach (var item in dataTable.Items)
+ // {
+ // DataGridCellInfo cellInfo = new DataGridCellInfo(item, columnHeader.Column);
+ // dataTable.SelectedCells.Add(cellInfo);
+ // }
+ // HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, columnHeader.Column);
- e.Handled = true; // 闃叉榛樿琛屼负
- }
- else if (dep is DataGridRow row)
- {
- // 娓呴櫎宸叉湁閫夋嫨
- dataTable.SelectedCells.Clear();
- dataTable.SelectedItem = row.Item;
- e.Handled = true;
- }
+ // e.Handled = true; // 闃叉榛樿琛屼负
+ //}
+ //else if (dep is DataGridRow row)
+ //{
+ // // 娓呴櫎宸叉湁閫夋嫨
+ // dataTable.SelectedCells.Clear();
+ // dataTable.SelectedItem = row.Item;
+ // e.Handled = true;
+ //}
}
private DataTable DoSearchData(DataBase_Setting setting, List<QueryData> datas)
{
+ string conditon = "WHERE 1=1 ";
string fields = string.Join(",", Datas?.Select(d => $"[{d.Key}]").ToList());
+ if (datas != null && datas.Count > 0)
+ {
+ conditon = "WHERE " + string.Join(" AND ", datas.Select(d => $"[{d.Key}] {d.Condition} '{d.Value}'").ToList());
+ }
- string conditon = string.Join(" AND ", datas.Select(d => $"[{d.Key}] {d.Condition} '{d.Value}'").ToList());
string timeCol = setting.TimeCol;
if (string.IsNullOrEmpty(timeCol))
{
timeCol = "time";
}
+
if (!string.IsNullOrEmpty(startTimeInput.Text))
{
conditon += $" AND {timeCol} >= '{startTimeInput.Text}'";
@@ -320,28 +355,74 @@
{
conditon += $" AND {timeCol} < '{endTimeInput.Text}'";
}
- conditon = string.IsNullOrEmpty(conditon) ? string.Empty : $" WHERE {conditon}";
- SqliteHelper helper = null;
- string sql = string.Empty;
- try
+ string sql = $"SELECT {fields} FROM {setting.TableName} {conditon}";
+
+ DataTable dt = new DataTable();
+
+ if (string.IsNullOrEmpty(setting.Pattern))
{
- helper = new SqliteHelper(setting.DBFilePath);
- sql = $"SELECT {fields} FROM {setting.TableName} {conditon}";
- DataTable dt = helper.GetDataTable(sql);
- HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
- dataTable.ItemsSource = dt.DefaultView;
- return dt;
+ try
+ {
+ using (var helper = new Sqlite3Helper(setting.DBFilePath))
+ {
+ dt = helper.GetDataTable(sql);
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Error($"Select Data Failed. SQL: {sql}", ex);
+ throw ex;
+ }
}
- catch (Exception ex)
+ else
{
- log.Error($"Select Data Failed. SQL: {sql}", ex);
- throw ex;
+ // 閫氶厤绗�
+ try
+ {
+ string dir = Path.GetDirectoryName(setting.DBFilePath);
+ string startName = $"Data_{startTimeInput.SelectedDateTime?.ToString("yyyyMMdd")}";
+ string endName = $"Data_{endTimeInput.SelectedDateTime?.ToString("yyyyMMdd")}";
+ var oldFiles = Directory.GetFiles(dir, "Data_*.db");
+ oldFiles = oldFiles.Where(file =>
+ {
+ var fileName = Path.GetFileNameWithoutExtension(file);
+ bool flag = true;
+ flag &= (string.Compare(fileName, startName) == 1 || fileName == startName);
+ flag &= (string.Compare(endName, fileName) == 1 || fileName == endName);
+ return flag;
+ }).ToArray();
+ if (oldFiles == null || oldFiles.Length <= 0)
+ {
+ return dt;
+ }
+
+ foreach (string file in oldFiles)
+ {
+ try
+ {
+ using (var helper = new SqliteHelper(file))
+ {
+ var temp = helper.GetDataTable(sql);
+ dt.Merge(temp);
+ }
+ }
+ catch
+ {
+
+ }
+ }
+ return dt;
+ }
+ catch (Exception ex)
+ {
+ log.Error($"Select Data Failed. SQL: {sql}", ex);
+ throw ex;
+ }
}
- finally
- {
- helper?.Close();
- }
+ //HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
+ //dt.
+ return dt;
}
private void SearchData()
@@ -354,7 +435,9 @@
}
var datas = Datas?.Where(d => !string.IsNullOrEmpty(d.Value)).ToList();
- if (datas == null || datas.Count <= 0)
+
+ if ((datas == null || datas.Count <= 0) &&
+ (string.IsNullOrEmpty(startTimeInput.Text) || string.IsNullOrEmpty(endTimeInput.Text)))
{
ToastHelper.Warning(Window.GetWindow(this), this.lang("Dv.QueryCantBeEmpty"));
return;
@@ -364,7 +447,7 @@
try
{
- DoSearchData(setting, datas);
+ dataTable.ItemsSource = DoSearchData(setting, datas).DefaultView;
}
catch (Exception ex)
{
@@ -374,6 +457,7 @@
private void ExportData()
{
+ int maxRow = 1048575;
try
{
string program = programInput.Text;
@@ -390,7 +474,8 @@
}
var datas = Datas?.Where(d => !string.IsNullOrEmpty(d.Value)).ToList();
- if (datas == null || datas.Count <= 0)
+ if ((datas == null || datas.Count <= 0) &&
+ (string.IsNullOrEmpty(startTimeInput.Text) || string.IsNullOrEmpty(endTimeInput.Text)))
{
ToastHelper.Warning(Window.GetWindow(this), this.lang("Dv.QueryCantBeEmpty"));
return;
@@ -416,7 +501,7 @@
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "";
- sfd.DefaultExt = "xls";
+ sfd.DefaultExt = "xlsx";
sfd.FileName = setting.Program;
if (sfd.ShowDialog() == DialogResult.OK)
{
@@ -427,29 +512,38 @@
1.寮曞叆搴撴枃浠�,鏂板缓lib鏂囦欢澶癸紝澶嶅埗鐩稿叧鏂囦欢
2.鍦ㄩ」鐩腑娣诲姞瀵硅繖鍑犱釜dll鐨勫紩鐢�
3.鍦ㄥ唴瀛樹腑寤虹珛 excel琛ㄦ枃浠� */
- XSSFWorkbook workbook = new XSSFWorkbook();
- workbook.CreateSheet("sheet1");////鏂板缓涓�涓伐浣滆〃
- XSSFSheet SheetOne = (XSSFSheet)workbook.GetSheet("Sheet1"); ////鑾峰彇鍚嶇О涓篠heet1鐨勫伐浣滆〃,鍒涘缓鏍囬澶�
- IRow row1 = SheetOne.CreateRow(0);////鑾峰彇Sheet1宸ヤ綔琛ㄧ殑棣栬,璁剧疆琛ㄥご锛岃幏鍙栧垪
- XSSFCell[] SheetCell = new XSSFCell[currentColumns.Count];
- for (int i = 0; i < currentColumns.Count; i++)
- {
- row1.CreateCell(i).SetCellValue(currentColumns[i].Header.ToString());
- }
-
- for (int i = 0; i < dataView.Count; i++)
- {
- IRow rowTemp = SheetOne.CreateRow(i + 1);
- for (int j = 0; j < currentColumns.Count; j++)
- {
- string name = ((System.Windows.Data.Binding)currentColumns[j].Binding).Path.Path;
- var value = dataView[i][name].ToString();
- rowTemp.CreateCell(j).SetCellValue(value);
- }
- }
-
using (FileStream fs = new FileStream(fname, FileMode.Create))
{
+
+ XSSFWorkbook workbook = new XSSFWorkbook();
+
+ int row = 1;
+ for (int i = 0; i < dataView.Count; i++)
+ {
+ int sheetIndex = sheetIndex = i / maxRow;
+ string sheetName = $"sheet{sheetIndex + 1}";
+ var sheet = (XSSFSheet)workbook.GetSheet(sheetName);
+ if (sheet == null)
+ {
+ sheet = (XSSFSheet)workbook.CreateSheet(sheetName);
+ IRow row1 = sheet.CreateRow(0);
+ for (int j = 0; j < currentColumns.Count; j++)
+ {
+ row1.CreateCell(j).SetCellValue(currentColumns[j].Header.ToString());
+ }
+ row = 1;
+ }
+
+
+ IRow rowTemp = sheet.CreateRow(row++);
+ for (int j = 0; j < currentColumns.Count; j++)
+ {
+ string name = ((System.Windows.Data.Binding)currentColumns[j].Binding).Path.Path;
+ var value = dataView[i][name].ToString();
+ rowTemp.CreateCell(j).SetCellValue(value);
+ }
+ }
+
workbook.Write(fs);
}
ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess"));
--
Gitblit v1.9.1