using 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 System.Windows.Controls.Primitives;
|
using System.Windows.Data;
|
using System.Windows.Media;
|
|
namespace HMI.DataViewer
|
{
|
/// <summary>
|
/// UserControl1.xaml 的交互逻辑
|
/// </summary>
|
public partial class DataViewer : PluginControl
|
{
|
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);
|
|
}
|
}
|
}
|