using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CowainHmi.Alarm { public partial class FrmEditAlarmTable : Form { private string excelFileName; public FrmEditAlarmTable(string _excelFileName) { InitializeComponent(); this.excelFileName = _excelFileName; } private BindingList alarmModels=new BindingList(); private void FrmEditAlarmTable_Load(object sender, EventArgs e) { var excelDataTable = AlarmExcelHelper.ReadReleaseExcel(excelFileName,alarmModels); alarmModels= AlarmExcelHelper.GetDataList(excelDataTable); dataGridView1.DataSource = alarmModels; } private void button1_Click(object sender, EventArgs e) { } string selectAddress = ""; private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } //selectAddress = GetCellValueByRowColumnIndex(dataGridView1, e.RowIndex, "地址"); } public string GetCellValueByRowColumnIndex(DataGridView dataGridView, int rowIndex, string columnName) { // 确保行号和DataGridView的行数在有效范围内 if (rowIndex < 0 || rowIndex >= dataGridView.Rows.Count) { throw new IndexOutOfRangeException("rowIndex is out of range."); } // 查找具有指定列名的列 DataGridViewColumn column = dataGridView.Columns.Cast().FirstOrDefault(c => c.Name == columnName); // 确保找到了列 if (column == null) { throw new ArgumentException("Column with specified name not found.", nameof(columnName)); } // 获取单元格的值 // 注意:这里使用rowIndex作为行索引,column.Index作为列索引 // 因为DataGridViewCellCollection是基于列的索引来访问单元格的,而不是直接使用列名 return dataGridView.Rows[rowIndex].Cells[column.Index].Value?.ToString() ?? string.Empty; } private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex < 0) { return; } var address = GetCellValueByRowColumnIndex(dataGridView1, e.RowIndex, "地址"); var rowInfo = alarmModels.Where(item => item.地址 == address).FirstOrDefault(); if (rowInfo != null) { var previousList = AlarmExcelHelper.DeepCopyList(alarmModels); string previousAddress = rowInfo.地址; FrmEditAlarmRecord frmEditAlarmRecord = new FrmEditAlarmRecord(rowInfo); frmEditAlarmRecord.ShowDialog(); int count = previousList.Where(item => item.地址 != previousAddress && item.地址 == rowInfo.地址).Count(); if (count > 0) { rowInfo.地址 = previousAddress; MessageBox.Show("PLC地址冲突,已回滚为以前的地址!"); } dataGridView1.Refresh(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void btnSave_Click(object sender, EventArgs e) { AlarmExcelHelper.SaveBindingListToExcel(alarmModels, excelFileName); MessageBox.Show("保存成功"); } public static int rowCount; private void button3_Click(object sender, EventArgs e) { //int rowCount = 1; AddRowCount addRowCount = new AddRowCount(); addRowCount.ShowDialog(); for (int i = 0; i < rowCount; i++) { PLCInfoModel.PLCAlarmInfo rowInfo = new PLCInfoModel.PLCAlarmInfo(); rowInfo.地址=Guid.NewGuid().ToString().Substring(0,8); alarmModels.Add(rowInfo); } dataGridView1.Refresh(); //PLCInfoModel.PLCAlarmInfo rowInfo = new PLCInfoModel.PLCAlarmInfo(); //int count=alarmModels.Where(item => item.地址==rowInfo.地址).Count(); //if (count>0) //{ // MessageBox.Show("有新增加的行没有更改,请先修改!"); // return; //} //alarmModels.Add(rowInfo); //var previousList = AlarmExcelHelper.DeepCopyList(alarmModels); //string previousAddress = rowInfo.地址; //FrmEditAlarmRecord frmEditAlarmRecord = new FrmEditAlarmRecord(rowInfo); //frmEditAlarmRecord.ShowDialog(); //count = previousList.Where(item => item.地址 != previousAddress && item.地址 == rowInfo.地址).Count(); //if (count > 0) //{ // rowInfo.地址 = previousAddress; // MessageBox.Show("PLC地址冲突,已回滚为以前的地址!"); //} //dataGridView1.Refresh(); } private void button4_Click(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count > 0) { // 显示确认对话框 var result = MessageBox.Show("确定要删除选中的行吗?", "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result != DialogResult.Yes) { return; } // 遍历所有选中行并删除 foreach (DataGridViewRow row in dataGridView1.SelectedRows) { // 如果行不是新行(未保存的行),则删除 if (!row.IsNewRow && row.Index>=0) { //dataGridView1.Rows.Remove(row); selectAddress = GetCellValueByRowColumnIndex(dataGridView1, row.Index, "地址"); var deleteItem = alarmModels.Where(item => item.地址 == selectAddress).FirstOrDefault(); alarmModels.Remove(deleteItem); } } dataGridView1.Refresh(); MessageBox.Show("删除成功!"); } else { MessageBox.Show("请选择要删除的行。"); } } private void button2_Click(object sender, EventArgs e) { for (int i = 0; i < alarmModels.Count; i++) { alarmModels[i].代码 = (i + 1).ToString(); } dataGridView1.Refresh(); } } }