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);
}
}
}