using JinYuan.Helper; using JinYuan.Models; using JinYuan.VirtualDataLibrary; using Language; using MiniExcelLibs; using PLC; using SqlSugar; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace LargeSquareOne { public partial class FrmVariableConfig : MultiLanguageForm { public FrmVariableConfig() { InitializeComponent(); this.cmb_DataType.DataSource = Enum.GetNames(typeof(DataType)); this.dgv_Main.AutoGenerateColumns = false; List TotalGroups = GetALLGroups(); TotalVariables = GetALLVariables(); this.cmb_GroupName.SelectedIndexChanged += Cmb_GroupName_SelectedIndexChanged; if (TotalGroups.Count > 0) { foreach (var item in TotalGroups) { this.cmb_GroupName.Items.Add(item.GroupName); } this.cmb_GroupName.SelectedIndex = 0; } } private void Cmb_GroupName_SelectedIndexChanged(object sender, EventArgs e) { RefreshVariable(); } #region 减少闪烁 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } #endregion #region 无边框拖动 private Point mPoint; private void Panel_MouseDown(object sender, MouseEventArgs e) { mPoint = new Point(e.X, e.Y); } private void Panel_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y); } } #endregion private string groupPath = CommonMethods.groupConfigPath;// Application.StartupPath + $"\\Config\\Group_{CommonMethods.sysConfig.StationNo}.xlsx"; private string variablePath = CommonMethods.variableConfigPath;// Application.StartupPath + $"\\Config\\Variable_{CommonMethods.sysConfig.StationNo}.xlsx"; /// /// 总变量地址 /// private List TotalVariables = new List(); /// /// 单一通信组地址 /// private List SignelVariables = new List(); /// /// 获取所有通信组 /// /// private List GetALLGroups() { try { return MiniExcel.Query(groupPath).ToList(); } catch (Exception) { return new List(); } } /// /// 获取所有变量 /// /// private List GetALLVariables() { try { return MiniExcel.Query(variablePath).ToList(); } catch (Exception) { return new List(); } } #region 根据通信组名称筛选 private List GetVariablesByGroupName(string groupName) { if (groupName.Length == 0) { return TotalVariables; } else { return TotalVariables.FindAll(x => x.GroupName == groupName).ToList(); } } #endregion /// /// 更新变量集合 /// private void RefreshVariable() { var list = GetVariablesByGroupName(this.cmb_GroupName.Text.Trim()); this.dgv_Main.DataSource = null; if (list != null && list.Count > 0) { SignelVariables = list; this.dgv_Main.DataSource = list; } } /// /// 判断变量名称是否存在 /// /// /// private bool IsVariableNameExits(string variableName) { return TotalVariables.FindAll(c => c.VarName == variableName).ToList().Count < 0; } #region 增删改通信组 /// /// 增加 /// /// /// private void btn_Add_Click(object sender, EventArgs e) { string varName = this.txt_VarName.Text.Trim(); if (varName.Length == 0) { new FrmMsgBoxOutWithAck(2, "变量名称不能为空!", "添加变量").Show(); return; } if (IsVariableNameExits(varName)) { new FrmMsgBoxOutWithAck(2, "变量名称已存在!", "添加变量").Show(); return; } TotalVariables.Add(new Variable() { VarName = varName, VarAddress = this.txt_VarAddress.Text, Start = this.txt_Start.Text.Trim(), OffsetOrLenght = Convert.ToUInt16(this.num_OffsetOrLenght.Value), DataType = this.cmb_DataType.Text.Trim(), GroupName = this.cmb_GroupName.Text.Trim(), PosAlarm = this.chk_PosAlarm.Checked, NegAlarm = this.chk_NegAlarm.Checked, Scale = Convert.ToSingle(this.num_Scale.Value), Offset = Convert.ToSingle(this.num_Offset.Value), Remark = this.txt_Remark.Text.Trim() }); try { MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true); //刷新数据 RefreshVariable(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "添加变量失败:" + ex.Message, "添加变量").Show(); } } /// /// 删除 /// /// /// private void btn_Delete_Click(object sender, EventArgs e) { string varName = this.txt_VarName.Text.Trim(); if (varName.Length == 0) { new FrmMsgBoxOutWithAck(2, "请选择需要删除的变量!", "删除变量").Show(); return; } if (IsVariableNameExits(varName)) { new FrmMsgBoxOutWithAck(2, "变量名称不存在!", "变量信组").Show(); return; } TotalVariables.RemoveAll(c => c.VarName == varName); try { MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true); //刷新数据 RefreshVariable(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "删除变量失败:" + ex.Message, "删除变量").Show(); } } /// /// 修改 /// /// /// private void btn_Modify_Click(object sender, EventArgs e) { string varName = this.txt_VarName.Text.Trim(); if (varName.Length == 0) { new FrmMsgBoxOutWithAck(2, "请选择需要修改的变量!", "修改变量").Show(); return; } if (IsVariableNameExits(varName)) { new FrmMsgBoxOutWithAck(2, "变量名称已存在!", "修改变量").Show(); return; } var variable = TotalVariables.Find(c => c.VarName == varName); variable.VarAddress = this.txt_VarAddress.Text.Trim(); variable.Start = this.txt_Start.Text.Trim(); variable.OffsetOrLenght = Convert.ToUInt16(this.num_OffsetOrLenght.Value); variable.DataType = this.cmb_DataType.Text.Trim(); variable.GroupName = this.cmb_GroupName.Text.Trim(); variable.PosAlarm = this.chk_PosAlarm.Checked; variable.NegAlarm = this.chk_NegAlarm.Checked; variable.Scale = Convert.ToSingle(this.num_Scale.Value); variable.Offset = Convert.ToSingle(this.num_Offset.Value); variable.Remark = this.txt_Remark.Text.Trim(); try { MiniExcel.SaveAs(variablePath, TotalVariables, overwriteFile: true); //刷新数据 RefreshVariable(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "修改变量失败:" + ex.Message, "修改变量").Show(); } } #endregion private void btn_Close_Click(object sender, EventArgs e) { this.Close(); } /// /// 行号 /// /// /// private void dgv_Main_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { DataGridViewHelper.DgvRowPostPaint((DataGridView)sender, e); } /// /// 默认为空显示特定字符 /// /// /// private void dgv_Main_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (e.ColumnIndex >= 0 && e.RowIndex >= 0) { object value = this.dgv_Main.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; if (e.ColumnIndex == 6 || e.ColumnIndex == 7) { if (value != null) { e.Value = value.ToString() == "True" ? "启用".Translated() : "禁用".Translated(); } } if (value == null || value.ToString().Length == 0) { e.Value = "---"; } } } /// /// 选中行显示 /// /// /// private void dgv_Main_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { int index = e.RowIndex; UpdateVariable(SignelVariables[e.RowIndex]); //Variable variable } } private void UpdateVariable(Variable variable) { if (variable != null) { this.cmb_GroupName.Text = variable.GroupName; this.txt_VarName.Text = variable.VarName; this.txt_VarAddress.Text = variable.VarAddress; this.txt_Start.Text = variable.Start; this.num_OffsetOrLenght.Value = variable.OffsetOrLenght; this.cmb_DataType.Text = variable.DataType; this.chk_NegAlarm.Checked = variable.NegAlarm; this.chk_PosAlarm.Checked = variable.PosAlarm; this.num_Scale.Value = Convert.ToDecimal(variable.Scale); this.num_Offset.Value = Convert.ToDecimal(variable.Offset); this.txt_Remark.Text = variable.Remark; } } } }