using JinYuan.Helper; using JinYuan.Models; using Language; using MiniExcelLibs; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; using System.Windows.Forms; using System.Xml.Schema; namespace LargeSquareOne { public partial class FrmGroupConfig : MultiLanguageForm { public FrmGroupConfig(PLCConfig plc) { InitializeComponent(); //this.cmb_StoreArea.DataSource = new string[] { "输入线圈", "输出线圈", "输入寄存器", "输出寄存器" }; this.dgv_Main.AutoGenerateColumns = false; currentPlc = plc; TotalGroups = GetALLGroups(); RefreshGroup(); } private string groupPath = Application.StartupPath + "\\Config\\Group.xlsx"; #region 减少闪烁 protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; return cp; } } #endregion private List TotalGroups = new List(); private PLCConfig currentPlc; /// /// 获取所有通信组 /// /// private List GetALLGroups() { try { return MiniExcel.Query(groupPath).ToList(); } catch (Exception) { return new List(); } } /// /// 更新通信组集合 /// private void RefreshGroup() { if (TotalGroups != null && TotalGroups.Count > 0) { this.dgv_Main.DataSource = null; this.dgv_Main.DataSource = TotalGroups; } else { this.dgv_Main.DataSource = null; // 清空数据源 } } #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 /// /// 判断组名称是否存在 /// /// /// 存在返回true,不存在返回false private bool IsGroupNameExits(string groupName) { return TotalGroups.Any(c => c.GroupName == groupName); } #region 增删改通信组 /// /// 增加 /// /// /// private void btn_Add_Click(object sender, EventArgs e) { string groupName = this.txt_GroupName.Text.Trim(); if (groupName.Length == 0) { new FrmMsgBoxOutWithAck(2, "通信组名称不能为空!", "添加通信组").Show(); return; } if (IsGroupNameExits(groupName)) { new FrmMsgBoxOutWithAck(2, "通信组名称已存在!", "添加通信组").Show(); return; } TotalGroups.Add(new Group() { GroupName = this.txt_GroupName.Text, Start = this.txtStart.Text, Length = Convert.ToUInt16(this.num_Length.Value), IsTiggerRead = this.ckb_IsTiggerRead.Checked, IsFeedbackPlc = this.chk_IsFeedbackPlc.Checked, IsActive = this.ckb_IsEnable.Checked, Remark = this.txt_Remark.Text.Trim() }); try { MiniExcel.SaveAs(groupPath, TotalGroups, overwriteFile: true); new FrmMsgBoxOutWithAck(1, "添加通信组成功", "添加通信组").Show(); //刷新数据 RefreshGroup(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "添加通信组失败:" + ex.Message, "添加通信组").Show(); } } /// /// 删除 /// /// /// private void btn_Delete_Click(object sender, EventArgs e) { string groupName = this.txt_GroupName.Text.Trim(); if (!IsGroupNameExits(groupName)) { new FrmMsgBoxOutWithAck(2, "通信组名称不存在!", "删除通信组").Show(); return; } TotalGroups.RemoveAll(c => c.GroupName == groupName); try { MiniExcel.SaveAs(groupPath, TotalGroups, overwriteFile: true); new FrmMsgBoxOutWithAck(1, "删除通信组成功", "删除通信组").Show(); // 清空输入框 ClearInputControls(); //刷新数据 RefreshGroup(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "删除通信组失败:" + ex.Message, "删除通信组").Show(); } } /// /// 修改 /// /// /// private void btn_Modify_Click(object sender, EventArgs e) { string groupName = this.txt_GroupName.Text.Trim(); if (!IsGroupNameExits(groupName)) { new FrmMsgBoxOutWithAck(2, "通信组名称不存在,无法修改!", "修改通信组").Show(); return; } // 添加空值检查 var group = TotalGroups.Find(c => c.GroupName == groupName); if (group == null) { new FrmMsgBoxOutWithAck(2, "未找到该通信组!", "修改通信组").Show(); return; } // 更新组信息 group.Start = this.txtStart.Text; group.Length = Convert.ToUInt16(this.num_Length.Value); group.IsTiggerRead = this.ckb_IsTiggerRead.Checked; group.IsFeedbackPlc = this.chk_IsFeedbackPlc.Checked; group.IsActive = this.ckb_IsEnable.Checked; group.Remark = this.txt_Remark.Text.Trim(); try { MiniExcel.SaveAs(groupPath, TotalGroups, overwriteFile: true); new FrmMsgBoxOutWithAck(1, "修改通信组成功", "修改通信组").Show(); //刷新数据 RefreshGroup(); } catch (Exception ex) { new FrmMsgBoxOutWithAck(3, "修改通信组失败:" + ex.Message, "修改通信组").Show(); } } /// /// 清空输入控件内容 /// private void ClearInputControls() { txt_GroupName.Text = string.Empty; txtStart.Text = string.Empty; num_Length.Value = 0; ckb_IsTiggerRead.Checked = false; chk_IsFeedbackPlc.Checked = false; ckb_IsEnable.Checked = false; txt_Remark.Text = string.Empty; } #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 (value == null || string.IsNullOrWhiteSpace(value.ToString())) { e.Value = "---"; } } } /// /// 选中行显示 /// /// /// private void dgv_Main_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0 && e.RowIndex < TotalGroups.Count) { UpdateGroup(TotalGroups[e.RowIndex]); } } private void UpdateGroup(Group group) { if (group != null) { this.txt_GroupName.Text = group.GroupName; this.txtStart.Text = group.Start; this.num_Length.Value = group.Length; this.ckb_IsTiggerRead.Checked = group.IsTiggerRead; this.chk_IsFeedbackPlc.Checked = group.IsFeedbackPlc; this.ckb_IsEnable.Checked = group.IsActive; this.txt_Remark.Text = group.Remark; } } } }