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);
|
}
|
|
/// <summary>
|
/// 水力视图事件
|
/// </summary>
|
public event Action<string> HydroViewEvent;
|
|
/// <summary>
|
/// 边框可见性
|
/// </summary>
|
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<HydroMonitorVmo> _allMonitorList = null;
|
private HydroCalcuResult _calcuResult = null;
|
private List<HydroWorkingVmo> _allWorkingList = null;
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroMonitorVmo> allMonitorList,
|
HydroCalcuResult calcuResult
|
)
|
{
|
|
_hydroInfo = hydroInfo;
|
_allMonitorList = allMonitorList;
|
_calcuResult = calcuResult;
|
InitialSingleColumns();
|
InitialSingleDataTable();
|
var overlay = this.ShowOverlay();
|
this.bindingSource1.DataSource = _dt;
|
this.gridView1.RefreshData();
|
overlay.Close();
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroMonitorVmo> allMonitorList,
|
List<HydroWorkingVmo> 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.Relation);
|
if (visual == null)
|
{
|
continue;
|
}
|
var calcuValue = allCalcuVisualDict?.GetValue(monitor.Relation)?.GetCalcuValue(monitor.PropName);
|
var row = _dt.NewRow();
|
row["Code"] = monitor.Relation;
|
row["Relation"] = 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<HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>>();
|
if (_allWorkingList != null && _allWorkingList.Count > 0)
|
{
|
foreach (var working in _allWorkingList)
|
{
|
var hydroInfo = _hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
|
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.Relation);
|
if (visual == null)
|
{
|
continue;
|
}
|
var row = _dt.NewRow();
|
row["Code"] = monitor.Relation;
|
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.Relation)?.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);
|
}
|
|
|
}
|
}
|