using DevExpress.XtraEditors; using DevExpress.XtraLayout; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.SS.Util; using PBS.Vmo; using System.IO; using Yw; using Yw.WinFrmUI; namespace IBox.WinFrmUI { public partial class IBoxFormRule : DocumentPage { FacilityVmo _facilities; public IBoxFormRule(FacilityVmo facilities = null) { this.PageTitle.Caption = "规则配置"; if (facilities == null) { facilities = new FacilityVmo() { ID = 1, Name = "临时设施" }; } _facilities = facilities; InitializeComponent(); SetDataType(); WaitFormHelper.ShowWaitForm(); } public void HideButton() { //simpleButton1.Visible = simpleButton2.Visible = simpleButton5.Visible = simpleButton3.Visible = simpleButton4.Visible = simpleButton6.Visible = simpleButton7.Visible = simpleButton8.Visible = false; layoutControlItem3.Visibility = layoutControlItem4.Visibility = layoutControlItem2.Visibility = layoutControlItem5.Visibility = layoutControlItem6.Visibility = layoutControlItem7.Visibility = layoutControlItem8.Visibility = layoutControlItem9.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; } private List signalTypes; private List monitorPoints; public void SetDataType() { var dics = new dModbus().ModbusDataType(); foreach (var d in dics) { repositoryItemImageComboBox1.Items.Add(d.Value, d.Key, -1); } var adcDics = new dModbus().AdcType(); foreach (var adc in adcDics) { repositoryItemImageComboBox3.Items.Add(adc.Value, adc.Key, -1); } var operDics = new dModbus().OperType(); foreach (var oper in operDics) { repositoryItemImageComboBox2.Items.Add(oper.Value, oper.Key, -1); } } public void SetSignalType(List list) { this.signalTypes = list; } public void SetMonitorPoint(List list) { this.monitorPoints = list; } public event EventHandler SendData; private void SendText(string content) { if (SendData != null) { SendData?.Invoke(null, content); } else { if (IBoxHelper.Ping()) { var smsg = content.Split(new string[] { IBoxHelper.paramCode, IBoxHelper.startCode }, StringSplitOptions.RemoveEmptyEntries); if (smsg.Length < 2) { return; } switch (smsg[0].Trim()) { case IBoxHelper.getrulesCode: { var order = IBoxHelper.HttpGet(content); var result = IBoxHelper.GetContent(order); if (!string.IsNullOrEmpty(result)) { var model = JsonHelper.Json2Object>(result); BindGrid(model, false); } break; } case IBoxHelper.saveparamsCode: case IBoxHelper.addMonitorgroupCode: case IBoxHelper.addsignalCode: { IBoxHelper.HttpPost(content); break; } default: IBoxHelper.HttpGet(content); break; } } else { MessageBoxHelper.ShowWarning("网络连接失败,请检查网络"); } } } private void EboxFormRule_Load(object sender, EventArgs e) { Thread.Sleep(500); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } private List dataList = null; private List stationMonitorLists; private List dataGridMonitorViewModels = new List(); /// /// 绑定数据 /// /// /// public void BindGrid(List list, bool isBlue = true) { stationMonitorLists = list; dataList = new List(); foreach (var item in list) { foreach (var ml in item.MonitorList) { dataList.Add(new DataGridMonitorViewModel() { GroupID = item.ID, GroupName = item.Name, MonitorName = ml.Name, SignalID = ml.SignalID, UnitName = ml.UnitName, BusAddress = ml.BusAddress, BusType = ml.BusType, IsEnable = ml.IsEnable, Operator = ml.Operator, Operands = ml.Operands, Accuracy = ml.Accuracy, AdcType = ml.AdcType, UpperRange = ml.UpperRange, LowerRange = ml.LowerRange, Flags = ml.Flags, SignalName = ml.Name, Description = ml.Description, SignalTypeID = ml.SignalTypeID, }); } } if (isBlue) { this.Invoke(new Action(() => { dataGridMonitorViewModels = dataList; this.dataGridMonitorViewModelBindingSource.DataSource = dataGridMonitorViewModels; })); } else { dataGridMonitorViewModels = dataList; this.dataGridMonitorViewModelBindingSource.DataSource = dataGridMonitorViewModels; } WaitFormHelper.HideWaitForm(); } private void simpleButton1_Click(object sender, EventArgs e) { Save(); } public void Save() { stationMonitorLists.ForEach(list => { list.MonitorList.ForEach(monitor => { var s = dataGridMonitorViewModels.FirstOrDefault(d => d.SignalID == monitor.SignalID); if (s != null) { monitor.BusAddress = s.BusAddress; monitor.BusType = s.BusType; monitor.IsEnable = s.IsEnable; monitor.Operator = s.Operator; monitor.Operands = s.Operands; monitor.Accuracy = s.Accuracy; monitor.AdcType = s.AdcType; monitor.UpperRange = s.UpperRange; monitor.LowerRange = s.LowerRange; } }); }); SendText(IBoxHelper.startCode + IBoxHelper.saverulesCode + IBoxHelper.paramCode + JsonHelper.Object2Json(stationMonitorLists) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("数据保存成功!"); } private void simpleButton5_Click(object sender, EventArgs e) { //删除测点 DeleteSignal(); } public void DeleteSignal() { var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; if (MessageBox.Show("确认删除测点 " + m.SignalName + " 吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { var md = new GeneralViewModel() { ID = m.SignalID }; SendText(IBoxHelper.startCode + IBoxHelper.deletesignalCode + IBoxHelper.paramCode + JsonHelper.Object2Json(md) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } private void simpleButton4_Click(object sender, EventArgs e) { //修改测点 EditSignal(); } public void EditSignal() { var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var s = new Signal() { BusAddress = m.BusAddress, Accuracy = m.Accuracy, AdcType = m.AdcType, BusType = m.BusType, Description = m.Description, Flags = m.Flags?.Split(',').ToList(), IsEnable = m.IsEnable, GroupID = m.GroupID, ID = m.SignalID, LowerRange = m.LowerRange, MonitorPointID = m.MonitorID, Name = m.SignalName, Operands = m.Operands, Operator = m.Operator.Value, SignalTypeID = m.SignalTypeID, UpperRange = m.UpperRange, }; var dlg = new SignalEditForm(this.signalTypes, this.monitorPoints, s); if (dlg.ShowDialog(this) == DialogResult.OK) { var signal = dlg.signal; SendText(IBoxHelper.startCode + IBoxHelper.addsignalCode + IBoxHelper.paramCode + JsonHelper.Object2Json(signal) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } private void simpleButton3_Click(object sender, EventArgs e) { //新增测点 AddSignal(); } public void AddSignal() { var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var dlg = new SignalEditForm(this.signalTypes, this.monitorPoints, null); if (dlg.ShowDialog(this) == DialogResult.OK) { var signal = dlg.signal; SendText(IBoxHelper.startCode + IBoxHelper.addsignalCode + IBoxHelper.paramCode + JsonHelper.Object2Json(signal) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } private void simpleButton7_Click(object sender, EventArgs e) { //删除机组 DeleteGroup(); } public void DeleteGroup() { var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; if (MessageBox.Show("删除机组会同时删除机组绑定的所有测点,确认删除机组 " + m.GroupName + " 吗?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { var md = new GeneralViewModel() { ID = m.GroupID }; SendText(IBoxHelper.startCode + IBoxHelper.deletemonitorgroupCode + IBoxHelper.paramCode + JsonHelper.Object2Json(md) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } private void simpleButton6_Click(object sender, EventArgs e) { //编辑机组 EditGroup(); } public void EditGroup() { var m = this.gridView1.GetRow(this.gridView1.FocusedRowHandle) as DataGridMonitorViewModel; var g = new IBox.WinFrmUI.MonitorPointGroup() { ID = m.GroupID, Name = m.GroupName }; var dlg = new MonitorGroupEditForm(g); if (dlg.ShowDialog() == DialogResult.OK) { var group = dlg.group; SendText(IBoxHelper.startCode + IBoxHelper.addMonitorgroupCode + IBoxHelper.paramCode + JsonHelper.Object2Json(group) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } private void simpleButton2_Click(object sender, EventArgs e) { //新增机组 AddGroup(); } public void AddGroup() { var dlg = new MonitorGroupEditForm(null); if (dlg.ShowDialog() == DialogResult.OK) { var group = dlg.group; SendText(IBoxHelper.startCode + IBoxHelper.addMonitorgroupCode + IBoxHelper.paramCode + JsonHelper.Object2Json(group) + IBoxHelper.endCode); MessageBoxHelper.ShowInfo("操作成功"); SendText(IBoxHelper.startCode + IBoxHelper.getrulesCode + IBoxHelper.paramCode + IBoxHelper.endCode); } } /// /// 导出 /// /// /// private void simpleButton8_Click(object sender, EventArgs e) { ExportXLS(); } /// /// 导出Excel /// public void ExportXLS() { try { if (dataGridMonitorViewModels == null || dataGridMonitorViewModels.Count == 0) { XtraMessageBox.Show("没有可导出的数据!"); return; } var dlg = new SaveFileDialog(); dlg.Filter = "EXCEL 文件(*.xls)|*.xls"; if (dlg.ShowDialog() != DialogResult.OK) return; HSSFWorkbook theBook = new HSSFWorkbook(); var theSheet1 = theBook.CreateSheet("Sheet1"); IRow rowHead = theSheet1.CreateRow(0); rowHead.CreateCell(0).SetCellValue(_facilities.ID + "," + _facilities.Name); CellRangeAddress region = new CellRangeAddress(0, 0, 0, 3); theSheet1.AddMergedRegion(region); IRow rowTile = theSheet1.CreateRow(1); rowTile.CreateCell(0).SetCellValue("机组ID"); rowTile.CreateCell(1).SetCellValue("机组名称"); rowTile.CreateCell(2).SetCellValue("测点ID"); rowTile.CreateCell(3).SetCellValue("测点名称"); for (int rowIndex = 2; rowIndex <= dataGridMonitorViewModels.Count + 1; rowIndex++) { int col = 0; IRow row = theSheet1.CreateRow(rowIndex); row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].GroupID.ToString()); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].GroupName); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].SignalID.ToString()); col++; row.CreateCell(col).SetCellValue(dataGridMonitorViewModels[rowIndex - 2].SignalName); col++; } //强制Excel在打开时重新计算所有公式 theSheet1.ForceFormulaRecalculation = true; using (FileStream fs = File.OpenWrite(dlg.FileName)) { theBook.Write(fs); } XtraMessageBox.Show("导出成功"); } catch (Exception ex) { XtraMessageBox.Show(ex.ToString()); } } } }