From 2b1a6417285597bc58ef28aa3f01aeee2532cd19 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期二, 04 三月 2025 13:36:17 +0800
Subject: [PATCH] 优化UI;
---
HMI.DataViewer/DataViewer.xaml.cs | 243 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 241 insertions(+), 2 deletions(-)
diff --git a/HMI.DataViewer/DataViewer.xaml.cs b/HMI.DataViewer/DataViewer.xaml.cs
index 7616abc..6c3ac20 100644
--- a/HMI.DataViewer/DataViewer.xaml.cs
+++ b/HMI.DataViewer/DataViewer.xaml.cs
@@ -1,6 +1,19 @@
-锘縰sing System.Windows;
+锘縰sing HMI.Base;
+using HMI.Core.Util;
+using HMI.DataViewer.Entity;
+using HMI.UI.Util;
+using Panuon.WPF.UI;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Windows;
using System.Windows.Controls;
-using HMI.Base;
+using System.Windows.Controls.Primitives;
+using System.Windows.Data;
+using System.Windows.Media;
namespace HMI.DataViewer
{
@@ -11,11 +24,237 @@
{
public DataViewer()
{
+ DataContext = this;
InitializeComponent();
}
+ private string SourceFilePath;
+
+ private ObservableCollection<DataBase_Setting> settings = new ObservableCollection<DataBase_Setting>();
+ public ObservableCollection<DataBase_Setting> Settings
+ {
+ get => settings;
+ set { Set(ref settings, value); }
+ }
+
+ private ObservableCollection<QueryData> datas = new ObservableCollection<QueryData>();
+ public ObservableCollection<QueryData> Datas
+ {
+ get => datas;
+ set { Set(ref datas, value); }
+ }
+
+ private Dictionary<string, DataBase_Setting> Map = new Dictionary<string, DataBase_Setting>();
+
private void Button_Click(object sender, RoutedEventArgs e)
{
+ Button btn = sender as Button;
+ switch (btn.Name)
+ {
+ case "addBtn":
+ OpenSettingModal(new DataBase_Setting());
+ break;
+ case "rfhBtn":
+ break;
+ case "delBtn":
+ break;
+ case "srhBtn":
+ SearchData();
+ break;
+ case "resetBtn":
+ ResetDataTable();
+ break;
+ default:
+ break;
+ }
+ }
+
+
+ private void OpenSettingModal(DataBase_Setting data)
+ {
+ DbSettingModal modal = new DbSettingModal(log)
+ {
+ Title = "鏂板鏁版嵁婧�",
+ Owner = Window.GetWindow(this)
+ };
+ if (modal.Open(-1, data, Settings, SourceFilePath) == true)
+ {
+ LoadData();
+ }
+ }
+
+ private void SearchData()
+ {
+ string program = programInput.Text;
+ if (!Map.ContainsKey(program))
+ {
+ ToastHelper.Error(Window.GetWindow(this), "鍙傛暟寮傚父锛岃鍒锋柊閲嶈瘯");
+ return;
+ }
+
+ var datas = Datas?.Where(d => !string.IsNullOrEmpty(d.Value)).ToList();
+ if (datas == null || datas.Count <= 0)
+ {
+ ToastHelper.Warning(Window.GetWindow(this), "璇疯缃煡璇㈡潯浠跺��");
+ return;
+ }
+
+ DataBase_Setting setting = Map[program];
+
+
+ string fields = string.Join(",", Datas?.Select(d => $"[{d.Key}]").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}'";
+ }
+ if (!string.IsNullOrEmpty(endTimeInput.Text))
+ {
+ conditon += $" AND {timeCol} < '{endTimeInput.Text}'";
+ }
+ conditon = string.IsNullOrEmpty(conditon) ? string.Empty : $" WHERE {conditon}";
+
+ SqliteHelper helper = null;
+ string sql = string.Empty;
+ try
+ {
+ 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;
+ }
+ catch (Exception ex)
+ {
+ log.Error($"Select Data Failed. SQL: {sql}", ex);
+ ToastHelper.Error(Window.GetWindow(this), $"鏌ヨ澶辫触锛亄ex.Message}");
+ }
+ finally
+ {
+ helper?.Close();
+ }
+ }
+
+ private void ResetDataTable()
+ {
+ startTimeInput.SelectedDateTime = null;
+ endTimeInput.SelectedDateTime = null;
+ dataTable.ItemsSource = null;
+ foreach (var data in Datas)
+ {
+ data.Value = null;
+ }
+ }
+
+ public override void SetBaseFolder(string folder)
+ {
+ base.SetBaseFolder(folder);
+ SourceFilePath = Path.Combine(BaseFolder, "SourceData.setting");
+ }
+
+ private void PluginControl_Loaded(object sender, RoutedEventArgs e)
+ {
+ LoadData();
+ Loaded -= PluginControl_Loaded;
+ }
+
+ private void LoadData()
+ {
+ if (File.Exists(SourceFilePath))
+ {
+ List<string> names = new List<string>();
+ Settings = XmlHelper.DeserializeFromXml<ObservableCollection<DataBase_Setting>>(SourceFilePath);
+ Map.Clear();
+ foreach (var data in Settings)
+ {
+ Map.Add(data.Program, data);
+ names.Add(data.Program);
+ }
+ programInput.ItemsSource = names;
+ }
+ }
+
+ private void programInput_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ var key = e.AddedItems[0].ToString();
+ if (!Map.ContainsKey(key))
+ {
+ ToastHelper.Error(Window.GetWindow(this), "鍙傛暟寮傚父锛岃鍒锋柊閲嶈瘯");
+ return;
+ }
+ DataBase_Setting setting = Map[key];
+ Datas = new ObservableCollection<QueryData>(
+ setting?.Condition?.Select(d => new QueryData { Key = d.Key, Name = d.Desc, Condition = "=" }).ToList());
+
+ var temp = dataTable.Columns[0];
+ HMI.UI.DpUtil.DataGridHelper.SetSelectedColumn(dataTable, null);
+ dataTable.Columns.Clear();
+ dataTable.Columns.Add(temp);
+ foreach (var data in Datas)
+ {
+ AddDataGridTextColumn(data.Name, data.Key);
+ }
+ }
+
+ private void AddDataGridTextColumn(string header, string bindingPath)
+ {
+ DataGridTextColumn textColumn = new DataGridTextColumn
+ {
+ Header = header,
+ Binding = new Binding(bindingPath),
+ Width = new DataGridLength(1, DataGridLengthUnitType.Star)
+ };
+ dataTable.Columns.Add(textColumn);
+ }
+
+ private void dataTable_PreviewMouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ // 鑾峰彇鐐瑰嚮鐨勫厓绱�
+ 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);
+
+ if (dep is DataGridColumnHeader columnHeader)
+ {
+ // 鑾峰彇鍒楃储寮�
+ int columnIndex = columnHeader.Column.DisplayIndex;
+
+ // 娓呴櫎宸叉湁閫夋嫨
+ 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);
+
+ e.Handled = true; // 闃叉榛樿琛屼负
+ }
+ else if (dep is DataGridRow row)
+ {
+ // 娓呴櫎宸叉湁閫夋嫨
+ dataTable.SelectedCells.Clear();
+ dataTable.SelectedItem = row.Item;
+ e.Handled = true;
+ }
+ }
+
+ private void MenuItem_Click(object sender, RoutedEventArgs e)
+ {
+ DataGridColumn column = HMI.UI.DpUtil.DataGridHelper.GetSelectedColumn(dataTable);
}
}
--
Gitblit v1.9.1