using HMI.AlarmInfoManage.Entity; using HMI.Core.Util; using HMI.UI.Util; using HMI.Util; using log4net; using Microsoft.Win32; using NPOI.SS.Formula.Functions; using Panuon.WPF.UI; using System; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Windows; using System.Windows.Controls; namespace HMI.AlarmInfoManage { /// /// AlarmSettingList.xaml 的交互逻辑 /// public partial class AlarmSettingList : WindowX { private ILog log; public AlarmSettingList(string blockFile, string markFile, ObservableCollection datasource, ObservableCollection markDatasource, ILog log) { this.blockFile = blockFile; this.markFile = markFile; Datasource = datasource; MarkDatasource = markDatasource; this.log = log; DataContext = this; InitializeComponent(); } private readonly string blockFile; private readonly string markFile; private ObservableCollection datasource; public ObservableCollection Datasource { get => datasource; set { Set(ref datasource, value); } } private ObservableCollection markDatasource; public ObservableCollection MarkDatasource { get => markDatasource; set { Set(ref markDatasource, value); } } private ObservableCollection items = new ObservableCollection { LangUtil.Get("Alm.DbBlockAlarm"), LangUtil.Get("Alm.TagAlarm") }; public ObservableCollection Items { get => items; set { Set(ref items, value); } } private int itemIndex; public int ItemIndex { get => itemIndex; set { Set(ref itemIndex, value); LoadData(); } } private void Button_Click(object sender, RoutedEventArgs e) { Button btn = sender as Button; AlarmSetting data = btn?.Tag as AlarmSetting; switch (btn.Name) { case "refreshBtn": LoadData(); break; case "addBtn": AddData(new AlarmSetting()); break; case "delBatchBtn": DeleteBatchData(); break; case "editBtn": EditData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data), data); break; case "exportBtn": ExportData(); break; case "importBtn": ImportData(); break; case "delBtn": DeleteData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data)); break; default: break; } } private void LoadData() { try { if (File.Exists(blockFile)) { Datasource = XmlHelper.DeserializeFromXml>(blockFile); } else { Datasource = new ObservableCollection(); } } catch (Exception ex) { Datasource = new ObservableCollection(); ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}"); } try { if (File.Exists(markFile)) { MarkDatasource = XmlHelper.DeserializeFromXml>(markFile); } else { MarkDatasource = new ObservableCollection(); } } catch (Exception ex) { MarkDatasource = new ObservableCollection(); ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}"); } } private void AddData(AlarmSetting data) { try { var file = ItemIndex == 0 ? blockFile : markFile; var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm"); var modal = new AlarmSettingModal(log) { Title = $"{this.lang("App.Add")}{temp}", Owner = Window.GetWindow(this), }; if (modal.Open(-1, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true) { LoadData(); } } catch (Exception ex) { log.Error("Add AlarmSetting Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.AddFailed")}: {ex.Message}"); } } private void EditData(int index, AlarmSetting data) { try { var file = ItemIndex == 0 ? blockFile : markFile; var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm"); var modal = new AlarmSettingModal(log) { Title = $"{this.lang("App.Edit")}{temp}", Owner = Window.GetWindow(this), }; if (modal.Open(index, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true) { LoadData(); } } catch (Exception ex) { log.Error("Edit AlarmSetting Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.EditFailed")}: {ex.Message}"); } } private void ExportData() { try { SaveFileDialog sfd = new SaveFileDialog { FileName = ItemIndex == 0 ? "DB块报警.xls" : "标志位报警.xls", Filter = "Excel|*.xls" }; if (sfd.ShowDialog() == true) { ExcelHelper.ExportExcel(sfd.FileName, ItemIndex == 0 ? Datasource : MarkDatasource); } } catch (Exception ex) { log.Error("Export Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.ExportFailed")}: {ex.Message}"); } } private void ImportData() { try { OpenFileDialog ofd = new OpenFileDialog { Filter = "Excel|*.xls" }; if (ofd.ShowDialog() == true) { var datasource = new ObservableCollection( ExcelHelper.ReadFromExcel(ofd.FileName)); if (ItemIndex == 0) { Datasource = datasource; } else { MarkDatasource = datasource; } var file = ItemIndex == 0 ? blockFile : markFile; var temp = ItemIndex == 0 ? Datasource : MarkDatasource; XmlHelper.SerializeToXml(file, temp); LoadData(); } } catch (Exception ex) { log.Error("Import Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.ImportFailed")}: {ex.Message}"); } } private void DeleteData(int index) { try { if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeleteThis")) == MessageBoxResult.OK) { var file = ItemIndex == 0 ? blockFile : markFile; var temp = XmlHelper.DeepClone(ItemIndex == 0 ? Datasource : MarkDatasource); temp.RemoveAt(index); XmlHelper.SerializeToXml(file, temp); LoadData(); } } catch (Exception ex) { log.Error("Delete AlarmSetting Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}"); } } private void DeleteBatchData() { try { var temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => e.IsSelected).ToList(); if (temp == null || temp.Count <= 0) { ToastHelper.Warning(Window.GetWindow(this), this.lang("HMI.NoDeleteData")); return; } if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeletes", temp.Count)) == MessageBoxResult.OK) { var file = ItemIndex == 0 ? blockFile : markFile; temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => !e.IsSelected).ToList(); XmlHelper.SerializeToXml(file, temp); LoadData(); } } catch (Exception ex) { log.Error("Delete Batch AlarmSetting Failed.", ex); ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}"); } } private void WindowX_Loaded(object sender, RoutedEventArgs e) { ItemIndex = 0; Loaded -= WindowX_Loaded; } } }