Files

307 lines
9.6 KiB
C#
Raw Permalink Normal View History

2026-08-06 09:23:30 +08:00
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<Group> TotalGroups = new List<Group>();
private PLCConfig currentPlc;
/// <summary>
/// 获取所有通信组
/// </summary>
/// <returns></returns>
private List<Group> GetALLGroups()
{
try
{
return MiniExcel.Query<Group>(groupPath).ToList();
}
catch (Exception)
{
return new List<Group>();
}
}
/// <summary>
/// 更新通信组集合
/// </summary>
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
/// <summary>
/// 判断组名称是否存在
/// </summary>
/// <param name="groupName"></param>
/// <returns>存在返回true,不存在返回false</returns>
private bool IsGroupNameExits(string groupName)
{
return TotalGroups.Any(c => c.GroupName == groupName);
}
#region 增删改通信组
/// <summary>
/// 增加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
/// <summary>
/// 删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
/// <summary>
/// 修改
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
}
/// <summary>
/// 清空输入控件内容
/// </summary>
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();
}
/// <summary>
/// 行号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgv_Main_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
DataGridViewHelper.DgvRowPostPaint((DataGridView)sender, e);
}
/// <summary>
/// 默认为空显示特定字符
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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 = "---";
}
}
}
/// <summary>
/// 选中行显示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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;
}
}
}
}