using System; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace StandardScene.Charge { /// /// 报警配置管理窗体 /// public partial class AlarmConfigManagementForm : Form { private readonly AlarmConfigDataService dataService; private AlarmConfig selectedAlarmConfig; public AlarmConfigManagementForm() { try { InitializeComponent(); dataService = AlarmConfigDataService.Instance; // 订阅Load事件,确保所有控件都已初始化后再加载数据 this.Load += AlarmConfigManagementForm_Load; } catch (Exception ex) { MessageBox.Show($"初始化报警配置管理窗体失败: {ex.Message}\n\n详细信息:\n{ex.StackTrace}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// 窗体加载事件 /// private void AlarmConfigManagementForm_Load(object sender, EventArgs e) { InitializeForm(); } /// /// 初始化窗体 /// private void InitializeForm() { try { // 初始化报警级别下拉框 if (cmbLevel != null) { cmbLevel.Items.Clear(); cmbLevel.Items.Add("无"); cmbLevel.Items.Add("低"); cmbLevel.Items.Add("中"); cmbLevel.Items.Add("高"); cmbLevel.Items.Add("严重"); cmbLevel.SelectedIndex = 2; // 默认选择"中" } // 初始化级别筛选下拉框 if (cmbLevelFilter != null) { cmbLevelFilter.Items.Clear(); cmbLevelFilter.Items.Add("全部"); cmbLevelFilter.Items.Add("无"); cmbLevelFilter.Items.Add("低"); cmbLevelFilter.Items.Add("中"); cmbLevelFilter.Items.Add("高"); cmbLevelFilter.Items.Add("严重"); cmbLevelFilter.SelectedIndex = 0; } LoadAlarmConfigs(); ClearEditFields(); } catch (Exception ex) { MessageBox.Show($"初始化窗体失败: {ex.Message}\n\n{ex.StackTrace}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// 加载报警配置列表 /// private void LoadAlarmConfigs() { try { if (dgvAlarmConfigs == null) { return; // 控件还未初始化,直接返回 } var alarmConfigs = dataService.GetAllAlarmConfigs(); if (alarmConfigs == null) { alarmConfigs = new System.Collections.Generic.List(); } // 根据级别筛选 if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0) { var filterLevel = (AlarmLevel)(cmbLevelFilter.SelectedIndex - 1); alarmConfigs = alarmConfigs.Where(a => a.Level == filterLevel).ToList(); } // 根据搜索文本筛选 if (txtSearch != null && !string.IsNullOrWhiteSpace(txtSearch.Text)) { var searchText = txtSearch.Text.Trim().ToLower(); alarmConfigs = alarmConfigs.Where(a => a.AlarmId.ToLower().Contains(searchText) || a.AlarmCode.ToString().Contains(searchText) || a.AlarmContent.ToLower().Contains(searchText) ).ToList(); } dgvAlarmConfigs.Rows.Clear(); foreach (var alarm in alarmConfigs) { var index = dgvAlarmConfigs.Rows.Add( alarm.AlarmId, alarm.AlarmCode, alarm.AlarmContent, GetLevelText(alarm.Level), alarm.Enabled ? "是" : "否", alarm.Remarks ); // 根据级别设置行颜色 var row = dgvAlarmConfigs.Rows[index]; switch (alarm.Level) { case AlarmLevel.Critical: row.DefaultCellStyle.BackColor = Color.FromArgb(255, 235, 238); // 浅红色 row.DefaultCellStyle.ForeColor = Color.FromArgb(183, 28, 28); // 安全地创建粗体字体 var baseFont = row.DefaultCellStyle.Font ?? dgvAlarmConfigs.DefaultCellStyle.Font ?? new Font("微软雅黑", 9F); row.DefaultCellStyle.Font = new Font(baseFont, FontStyle.Bold); break; case AlarmLevel.High: row.DefaultCellStyle.BackColor = Color.FromArgb(255, 243, 224); // 浅橙色 row.DefaultCellStyle.ForeColor = Color.FromArgb(230, 81, 0); break; case AlarmLevel.Medium: row.DefaultCellStyle.BackColor = Color.FromArgb(255, 249, 196); // 浅黄色 row.DefaultCellStyle.ForeColor = Color.FromArgb(245, 127, 23); break; case AlarmLevel.Low: row.DefaultCellStyle.BackColor = Color.FromArgb(232, 245, 233); // 浅绿色 row.DefaultCellStyle.ForeColor = Color.FromArgb(46, 125, 50); break; } // 如果未启用,显示为灰色 if (!alarm.Enabled) { row.DefaultCellStyle.BackColor = Color.FromArgb(238, 238, 238); row.DefaultCellStyle.ForeColor = Color.FromArgb(158, 158, 158); } } UpdateStatistics(); UpdateTitleWithFilter(alarmConfigs.Count); } catch (Exception ex) { MessageBox.Show($"加载数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// 更新统计信息 /// private void UpdateStatistics() { try { if (lblStatistics == null) { return; } var alarmConfigs = dataService.GetAllAlarmConfigs(); if (alarmConfigs == null) { alarmConfigs = new System.Collections.Generic.List(); } var total = alarmConfigs.Count; var enabled = alarmConfigs.Count(a => a.Enabled); var disabled = total - enabled; var critical = alarmConfigs.Count(a => a.Level == AlarmLevel.Critical); var high = alarmConfigs.Count(a => a.Level == AlarmLevel.High); lblStatistics.Text = $"总数: {total} | 启用: {enabled} | 禁用: {disabled} | 严重: {critical} | 高级: {high}"; } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"更新统计信息失败: {ex.Message}"); } } /// /// 更新标题显示筛选信息 /// private void UpdateTitleWithFilter(int displayCount) { try { var allConfigs = dataService.GetAllAlarmConfigs(); var totalCount = allConfigs != null ? allConfigs.Count : 0; if (cmbLevelFilter != null && cmbLevelFilter.SelectedIndex > 0) { this.Text = $"报警配置管理 - 显示: {displayCount}/{totalCount} ({cmbLevelFilter.Text})"; } else { this.Text = $"报警配置管理 - 总数: {totalCount}"; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"更新标题失败: {ex.Message}"); this.Text = "报警配置管理"; } } /// /// 获取级别文本 /// private string GetLevelText(AlarmLevel level) { switch (level) { case AlarmLevel.None: return "无"; case AlarmLevel.Low: return "低"; case AlarmLevel.Medium: return "中"; case AlarmLevel.High: return "高"; case AlarmLevel.Critical: return "严重"; default: return "未知"; } } /// /// 清空编辑字段 /// private void ClearEditFields() { try { selectedAlarmConfig = null; if (txtAlarmId != null) { txtAlarmId.Text = ""; txtAlarmId.Enabled = false; // 新增时编号自动生成 } if (numAlarmCode != null) { numAlarmCode.Value = 0; numAlarmCode.Enabled = true; numAlarmCode.ReadOnly = false; } if (txtAlarmContent != null) { txtAlarmContent.Text = ""; txtAlarmContent.Enabled = true; txtAlarmContent.ReadOnly = false; } if (cmbLevel != null) { cmbLevel.SelectedIndex = 2; // 中 cmbLevel.Enabled = true; } if (chkEnabled != null) { chkEnabled.Checked = true; chkEnabled.Enabled = true; } if (txtRemarks != null) { txtRemarks.Text = ""; txtRemarks.Enabled = true; txtRemarks.ReadOnly = false; } if (btnSave != null) { btnSave.Text = "新增"; btnSave.Enabled = true; } if (btnDelete != null) { btnDelete.Enabled = false; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"清空编辑字段失败: {ex.Message}"); } } /// /// 从字段创建报警配置 /// private AlarmConfig CreateAlarmConfigFromFields() { var alarmConfig = selectedAlarmConfig ?? new AlarmConfig(); alarmConfig.AlarmCode = (int)numAlarmCode.Value; alarmConfig.AlarmContent = txtAlarmContent.Text.Trim(); alarmConfig.Level = (AlarmLevel)cmbLevel.SelectedIndex; alarmConfig.Enabled = chkEnabled.Checked; alarmConfig.Remarks = txtRemarks.Text.Trim(); return alarmConfig; } /// /// 加载报警配置到编辑区 /// private void LoadAlarmConfigToFields(AlarmConfig alarmConfig) { try { selectedAlarmConfig = alarmConfig; // 填充数据 if (txtAlarmId != null) { txtAlarmId.Text = alarmConfig.AlarmId; txtAlarmId.Enabled = false; // 编号不可修改 } if (numAlarmCode != null) { numAlarmCode.Value = alarmConfig.AlarmCode; numAlarmCode.Enabled = true; numAlarmCode.ReadOnly = false; } if (txtAlarmContent != null) { txtAlarmContent.Text = alarmConfig.AlarmContent; txtAlarmContent.Enabled = true; txtAlarmContent.ReadOnly = false; } if (cmbLevel != null) { cmbLevel.SelectedIndex = (int)alarmConfig.Level; cmbLevel.Enabled = true; } if (chkEnabled != null) { chkEnabled.Checked = alarmConfig.Enabled; chkEnabled.Enabled = true; } if (txtRemarks != null) { txtRemarks.Text = alarmConfig.Remarks ?? ""; txtRemarks.Enabled = true; txtRemarks.ReadOnly = false; } // 设置按钮状态 if (btnSave != null) { btnSave.Text = "保存"; btnSave.Enabled = true; } if (btnDelete != null) { btnDelete.Enabled = true; } } catch (Exception ex) { MessageBox.Show($"加载数据到编辑区失败: {ex.Message}\n\n{ex.StackTrace}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } // ==================== 事件处理 ==================== private void btnSave_Click(object sender, EventArgs e) { try { // 验证报警编码 if (numAlarmCode.Value < 0) { MessageBox.Show("报警编码不能为负数", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); numAlarmCode.Focus(); return; } // 验证报警内容 if (string.IsNullOrWhiteSpace(txtAlarmContent.Text)) { MessageBox.Show("报警内容不能为空", "验证失败", MessageBoxButtons.OK, MessageBoxIcon.Warning); txtAlarmContent.Focus(); return; } var alarmConfig = CreateAlarmConfigFromFields(); string errorMessage; bool success; if (selectedAlarmConfig == null) { // 新增 success = dataService.AddAlarmConfig(alarmConfig, out errorMessage); } else { // 更新 success = dataService.UpdateAlarmConfig(alarmConfig, out errorMessage); } if (success) { MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LoadAlarmConfigs(); ClearEditFields(); } else { MessageBox.Show($"保存失败: {errorMessage}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { MessageBox.Show($"保存失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void btnDelete_Click(object sender, EventArgs e) { if (selectedAlarmConfig == null) { MessageBox.Show("请先选择要删除的报警配置", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var result = MessageBox.Show( $"确定要删除报警配置 [{selectedAlarmConfig.AlarmCode}] {selectedAlarmConfig.AlarmContent} 吗?", "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { if (dataService.DeleteAlarmConfig(selectedAlarmConfig.AlarmId, out string errorMessage)) { MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); LoadAlarmConfigs(); ClearEditFields(); } else { MessageBox.Show($"删除失败: {errorMessage}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } private void btnCancel_Click(object sender, EventArgs e) { ClearEditFields(); } private void btnRefresh_Click(object sender, EventArgs e) { dataService.Reload(); LoadAlarmConfigs(); } private void btnClose_Click(object sender, EventArgs e) { this.Close(); } private void dgvAlarmConfigs_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { try { if (e.RowIndex >= 0 && e.RowIndex < dgvAlarmConfigs.Rows.Count) { var row = dgvAlarmConfigs.Rows[e.RowIndex]; if (row.Cells[0].Value != null) { var alarmId = row.Cells[1].Value.ToString(); var alarmConfig = dataService.GetAlarmConfigAlarmCode(int.Parse(alarmId)); if (alarmConfig != null) { LoadAlarmConfigToFields(alarmConfig); } else { MessageBox.Show($"未找到报警配置: {alarmId}", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); } } } } catch (Exception ex) { MessageBox.Show($"加载报警配置失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void txtSearch_TextChanged(object sender, EventArgs e) { LoadAlarmConfigs(); } private void cmbLevelFilter_SelectedIndexChanged(object sender, EventArgs e) { LoadAlarmConfigs(); } } }