using HMI.Core.Entity; using HMI.Core.Manager; using HMI.Core.Util; using HMI.UI.DpUtil; using HMI.UI.Util; using HMI.Util; using Microsoft.Win32; using Panuon.WPF.UI; using Plugin.DOControl.Entity; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; namespace Plugin.DOControl { /// /// ModalWindow.xaml 的交互逻辑 /// public partial class ControlList : WindowX { public ControlList() { this.DataContext = this; InitializeComponent(); } private ObservableCollection datasource; public ObservableCollection Datasource { get { return datasource; } set { Set(ref datasource, value); } } private bool dataChanged; protected override void OnClosing(CancelEventArgs e) { DialogResult = dataChanged; base.OnClosing(e); } private void Button_Click(object sender, RoutedEventArgs e) { Button btn = sender as Button; DOControlData data = btn?.DataContext as DOControlData; switch (btn.Name) { case "addBtn": OpenDataModal(null); break; case "editBtn": OpenDataModal(data); break; case "delBtn": TryDeleteData(data); break; case "delBatchBtn": TryDeleteBatch(); break; case "refreshBtn": LoadData(); break; case "exportBtn": TryExport(); break; case "importBtn": TryImport(); break; default: break; } } public void LoadData() { ObservableCollection datas = new ObservableCollection(); try { if (File.Exists(DOControl.FilePath)) { datas = XmlHelper.DeserializeFromXml>(DOControl.FilePath); } } catch (Exception ex) { DOControl.Logger?.Error("Data List Load Data Failed.", ex); ToastHelper.Error($"{this.lang("App.LoadFailed")}: {ex.Message}"); } Datasource = datas; } private void OpenDataModal(DOControlData data) { try { DataModal modal = new DataModal { Title = data == null ? this.lang("App.Add") : this.lang("App.Edit"), Owner = Window.GetWindow(this) }; if (modal.Open(data ?? new DOControlData(), Datasource) == true) { dataChanged = true; LoadData(); } } catch (Exception ex) { DOControl.Logger?.Error($"Data List {(data == null ? "Add" : "Edit")} Data Failed.", ex); ToastHelper.Error($"{(data == null ? this.lang("App.AddFailed") : this.lang("App.EditFailed"))}: {ex.Message}"); } } private void TryDeleteData(DOControlData data) { try { int index = Datasource.IndexOf(data); if (index < 0) { ToastHelper.Error("Error"); return; } if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name)) == MessageBoxResult.OK) { var temp = XmlHelper.DeepClone(Datasource); temp.RemoveAt(index); XmlHelper.SerializeToXml(DOControl.FilePath, temp); dataChanged = true; LoadData(); } } catch (Exception ex) { DOControl.Logger?.Error($"Data List Try Delete Data Failed.", ex); ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}"); } } private void TryDeleteBatch() { try { var count = Datasource.Where(d => d.IsSelected).Count(); if (count <= 0) { ToastHelper.Warning(this, this.lang("HMI.NoDeleteData")); return; } if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeletes", count)) == MessageBoxResult.OK) { var temp = Datasource.Where(d => !d.IsSelected).ToList(); XmlHelper.SerializeToXml(DOControl.FilePath, temp); dataChanged = true; LoadData(); } } catch (Exception ex) { DOControl.Logger?.Error($"Data List Try Delete Batch Data Failed.", ex); ToastHelper.Error($"{this.lang("App.DeleteFailed")}: {ex.Message}"); } } public void TryExport() { try { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = ""; sfd.DefaultExt = "xls"; sfd.FileName = this.lang("doc.list"); if (sfd.ShowDialog() == true) { string targetPath = sfd.FileName; ExcelHelper.ExportExcel(targetPath, Datasource); ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess")); } } catch (Exception ex) { DOControl.Logger?.Error("Export Data Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}"); } } public void TryImport() { try { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "execl(*.xlsx;*.xls)|*.xlsx;*.xls"; openFileDialog.Title = this.lang("App.SelectFile"); openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == true) { List datas = ExcelHelper.ReadFromExcel(openFileDialog.FileName); XmlHelper.SerializeToXml(DOControl.FilePath, datas); dataChanged = true; LoadData(); } } catch (Exception ex) { DOControl.Logger?.Error("Export Test Item Failed.", ex); MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}"); } } public bool? Open(ObservableCollection datasource) { Datasource = datasource; return this.ShowDialog(); } } }