From d1b72117058f1131046b6aa3add8e3ccfae033d8 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 10:36:07 +0800
Subject: [PATCH] docs: CAN 模拟器独立 TCP 服务进程设计规格(统一 CanDeviceDriver + 双工推送协议)
---
HMI.DataViewer/DataViewer.xaml.cs | 222 ++++++++++++++++++++++++++++++++++++------------------
1 files changed, 147 insertions(+), 75 deletions(-)
diff --git a/HMI.DataViewer/DataViewer.xaml.cs b/HMI.DataViewer/DataViewer.xaml.cs
index cd1a970..d704535 100644
--- a/HMI.DataViewer/DataViewer.xaml.cs
+++ b/HMI.DataViewer/DataViewer.xaml.cs
@@ -1,23 +1,27 @@
锘縰sing HMI.Base;
using HMI.Core.Util;
using HMI.DataViewer.Entity;
+using HMI.UI.Converter;
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
{
+
+
/// <summary>
/// UserControl1.xaml 鐨勪氦浜掗�昏緫
/// </summary>
@@ -27,6 +31,7 @@
{
DataContext = this;
InitializeComponent();
+ DefaultDate();
}
private string SourceFilePath;
@@ -141,10 +146,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)
{
@@ -256,7 +267,10 @@
DataGridTextColumn textColumn = new DataGridTextColumn
{
Header = header,
- Binding = new System.Windows.Data.Binding(bindingPath),
+ Binding = new System.Windows.Data.Binding(bindingPath)
+ {
+ Converter = DateStrConverter.Instance
+ },
Width = new DataGridLength(1, DataGridLengthUnitType.Star)
};
dataTable.Columns.Add(textColumn);
@@ -265,41 +279,41 @@
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)
@@ -326,26 +340,73 @@
conditon += $" AND {timeCol} < '{endTimeInput.Text}'";
}
- 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()
@@ -370,7 +431,7 @@
try
{
- DoSearchData(setting, datas);
+ dataTable.ItemsSource = DoSearchData(setting, datas).DefaultView;
}
catch (Exception ex)
{
@@ -380,6 +441,7 @@
private void ExportData()
{
+ int maxRow = 1048575;
try
{
string program = programInput.Text;
@@ -396,7 +458,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;
@@ -422,7 +485,7 @@
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "";
- sfd.DefaultExt = "xls";
+ sfd.DefaultExt = "xlsx";
sfd.FileName = setting.Program;
if (sfd.ShowDialog() == DialogResult.OK)
{
@@ -433,29 +496,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