using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraGrid.Columns; using Mapster; 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.Windows.Forms; using System.Windows.Media; using System.Windows.Media.Imaging; namespace Yw.WinFrmUI { public partial class HydroWorkingMonitorAnalyListCtrl : DevExpress.XtraEditors.XtraUserControl { public HydroWorkingMonitorAnalyListCtrl() { InitializeComponent(); this.gridView1.SetLimitView(); this.gridView1.RegistCustomDrawRowIndicator(40); } /// /// 水力视图事件 /// public event Action HydroViewEvent; /// /// 边框可见性 /// public bool BorderVisible { get { return this.gridView1.BorderStyle != BorderStyles.NoBorder; } set { this.gridView1.BorderStyle = value ? BorderStyles.Default : BorderStyles.NoBorder; } } private DataTable _dt = null;//表格 private Yw.Model.HydroModelInfo _hydroInfo = null; private List _allMonitorList = null; private HydroCalcuResult _calcuResult = null; private List _allWorkingList = null; /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, List allMonitorList, HydroCalcuResult calcuResult ) { _hydroInfo = hydroInfo; _allMonitorList = allMonitorList; _calcuResult = calcuResult; InitialSingleColumns(); InitialSingleDataTable(); var overlay = this.ShowOverlay(); this.bindingSource1.DataSource = _dt; this.gridView1.RefreshData(); overlay.Close(); } /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, List allMonitorList, List allWorkingList ) { _hydroInfo = hydroInfo; _allMonitorList = allMonitorList; _allWorkingList = allWorkingList; var overlay = this.ShowOverlay(); InitialMultiColumns(); InitialMultiDataTable(); this.bindingSource1.DataSource = _dt; this.gridView1.RefreshData(); overlay.Close(); } //初始化单工况列 private void InitialSingleColumns() { this.gridView1.Columns.Clear(); //构件 var colRelation = new GridColumn(); colRelation.Caption = "构件"; colRelation.FieldName = "Relation"; colRelation.Visible = true; this.gridView1.Columns.Add(colRelation); //属性 var colProp = new GridColumn(); colProp.Caption = "属性"; colProp.FieldName = "PropName"; colProp.Visible = true; this.gridView1.Columns.Add(colProp); //计算值 var colCalcuValue = new GridColumn(); colCalcuValue.Caption = "计算值"; colCalcuValue.FieldName = "CalcuValue"; colCalcuValue.Visible = true; this.gridView1.Columns.Add(colCalcuValue); //单位 var colUnit = new GridColumn(); colUnit.Caption = "单位"; colUnit.FieldName = "UnitName"; colUnit.Visible = true; this.gridView1.Columns.Add(colUnit); } //初始化单工况表格 private void InitialSingleDataTable() { _dt = new DataTable(); _dt.Columns.Add("Code", typeof(string)); _dt.Columns.Add("Relation", typeof(string)); _dt.Columns.Add("PropName", typeof(string)); _dt.Columns.Add("CalcuValue", typeof(string)); _dt.Columns.Add("UnitName", typeof(string)); var allMonitorList = _allMonitorList?.OrderBy(x => x.SortCode).ToList(); if (allMonitorList != null && allMonitorList.Count > 0) { var allVisualDict = _hydroInfo.GetVisualDict(); var allCalcuVisualDict = _calcuResult?.GetVisualDict(); foreach (var monitor in allMonitorList) { var visual = allVisualDict?.GetValue(monitor.Parter); if (visual == null) { continue; } var calcuValue = allCalcuVisualDict?.GetValue(monitor.Parter)?.GetCalcuValue(monitor.PropName); var row = _dt.NewRow(); row["Code"] = monitor.Parter; row["Parter"] = visual.Name; row["PropName"] = HydroMonitorPropHelper.GetName(monitor.PropName); row["CalcuValue"] = calcuValue.HasValue ? Math.Round(calcuValue.Value, 2).ToString() : null; row["UnitName"] = HydroMonitorPropHelper.GetUnit(monitor.PropName); _dt.Rows.Add(row); } } } //初始化多工况列 private void InitialMultiColumns() { this.gridView1.Columns.Clear(); //构件 var colRelation = new GridColumn(); colRelation.Caption = "构件"; colRelation.FieldName = "Relation"; colRelation.Visible = true; this.gridView1.Columns.Add(colRelation); //属性 var colProp = new GridColumn(); colProp.Caption = "属性"; colProp.FieldName = "PropName"; colProp.Visible = true; this.gridView1.Columns.Add(colProp); //工况 if (_allWorkingList != null && _allWorkingList.Count > 0) { foreach (var working in _allWorkingList) { var colCalcuValue = new GridColumn(); colCalcuValue.Caption = working.Name; colCalcuValue.FieldName = working.ID.ToString(); colCalcuValue.Visible = true; this.gridView1.Columns.Add(colCalcuValue); } } //单位 var colUnit = new GridColumn(); colUnit.Caption = "单位"; colUnit.FieldName = "UnitName"; colUnit.Visible = true; this.gridView1.Columns.Add(colUnit); } //初始化多工况表格 private void InitialMultiDataTable() { _dt = new DataTable(); _dt.Columns.Add("Code", typeof(string)); _dt.Columns.Add("Relation", typeof(string)); _dt.Columns.Add("PropName", typeof(string)); if (_allWorkingList != null && _allWorkingList.Count > 0) { foreach (var working in _allWorkingList) { _dt.Columns.Add(working.ID.ToString(), typeof(string)); } } _dt.Columns.Add("UnitName", typeof(string)); var dict = new Dictionary>(); if (_allWorkingList != null && _allWorkingList.Count > 0) { foreach (var working in _allWorkingList) { var hydroInfo = _hydroInfo.Adapt(); hydroInfo.UpdateWorkingInfo(working.WorkingInfo); var calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss); var allCalcuVisualDict = calcuResult.GetVisualDict(); dict.Add(working, allCalcuVisualDict); } } var allMonitorList = _allMonitorList?.OrderBy(x => x.SortCode).ToList(); if (allMonitorList != null && allMonitorList.Count > 0) { var allVisualDict = _hydroInfo.GetVisualDict(); foreach (var monitor in allMonitorList) { var visual = allVisualDict?.GetValue(monitor.Parter); if (visual == null) { continue; } var row = _dt.NewRow(); row["Code"] = monitor.Parter; row["Relation"] = visual.Name; row["PropName"] = HydroMonitorPropHelper.GetName(monitor.PropName); if (dict.Count > 0) { foreach (var item in dict) { var calcuValue = item.Value.GetValue(monitor.Parter)?.GetCalcuValue(monitor.PropName); row[item.Key.ID.ToString()] = calcuValue.HasValue ? Math.Round(calcuValue.Value, 2).ToString() : null; } } row["UnitName"] = HydroMonitorPropHelper.GetUnit(monitor.PropName); _dt.Rows.Add(row); } } } private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { var row = this.gridView1.GetRow(e.RowHandle) as DataRowView; if (row == null) { return; } var code = row.Row["Code"]?.ToString(); this.HydroViewEvent?.Invoke(code); } } }