using HMI.Base;
using HMI.Core.Util;
using HMI.DataViewer.Entity;
using HMI.UI.Util;
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.Data;
namespace HMI.DataViewer
{
///
/// UserControl1.xaml 的交互逻辑
///
public partial class DataViewer : PluginControl
{
public DataViewer()
{
DataContext = this;
InitializeComponent();
}
private string SourceFilePath;
private ObservableCollection settings = new ObservableCollection();
public ObservableCollection Settings
{
get => settings;
set { Set(ref settings, value); }
}
private ObservableCollection datas = new ObservableCollection();
public ObservableCollection Datas
{
get => datas;
set { Set(ref datas, value); }
}
private Dictionary Map = new Dictionary();
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);
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 names = new List();
Settings = XmlHelper.DeserializeFromXml>(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(
setting?.Condition?.Select(d => new QueryData { Key = d.Key, Name = d.Desc, Condition = "=" }).ToList());
var temp = dataTable.Columns[0];
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);
}
}
}