using DevExpress.XtraEditors.Controls;
|
using DevExpress.XtraGrid.Columns;
|
using Mapster;
|
using System.Data;
|
|
namespace Yw.WinFrmUI
|
{
|
public partial class HydroMonitorAnalyListCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public HydroMonitorAnalyListCtrl()
|
{
|
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 List<HydroWorkingVmo> _allWorkingList = null;
|
private Dictionary<HydroWorkingVmo, HydroCalcuResult> _allCalcuResultDict = null;//计算结果字典
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroMonitorVmo> allMonitorList,
|
HydroWorkingVmo working,
|
HydroCalcuResult calcuResult = null,
|
bool isHead = false,
|
List<HydroEvaluationVmo> allEvaluationList = null
|
)
|
{
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
if (allMonitorList == null || allMonitorList.Count < 1)
|
{
|
return;
|
}
|
if (working == null)
|
{
|
return;
|
}
|
_hydroInfo = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
|
_allMonitorList = allMonitorList;
|
_allWorkingList = new List<HydroWorkingVmo>() { working };
|
if (calcuResult == null)
|
{
|
_hydroInfo.UpdateWorkingInfo(working.WorkingInfo);
|
calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, isHead, allEvaluationList);
|
if (!calcuResult.Succeed)
|
{
|
return;
|
}
|
}
|
_allCalcuResultDict = new Dictionary<HydroWorkingVmo, HydroCalcuResult>()
|
{
|
{ working,calcuResult}
|
};
|
|
var overlay = this.ShowOverlay();
|
InitialSingleColumns();
|
InitialSingleDataTable();
|
this.bindingSource1.DataSource = _dt;
|
this.bindingSource1.ResetBindings(false);
|
this.gridView1.RefreshData();
|
overlay.Close();
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroMonitorVmo> allMonitorList,
|
List<HydroWorkingVmo> allWorkingList,
|
bool isHead = false,
|
List<HydroEvaluationVmo> allEvaluationList = null
|
)
|
{
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
if (allMonitorList == null || allMonitorList.Count < 1)
|
{
|
return;
|
}
|
if (allWorkingList == null || allWorkingList.Count < 1)
|
{
|
return;
|
}
|
|
var overlay = this.ShowOverlay();
|
|
_hydroInfo = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
|
_allMonitorList = allMonitorList;
|
_allWorkingList = allWorkingList;
|
_allCalcuResultDict = new Dictionary<HydroWorkingVmo, HydroCalcuResult>();
|
foreach (var working in allWorkingList)
|
{
|
_hydroInfo.UpdateWorkingInfo(working.WorkingInfo);
|
var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, isHead, allEvaluationList);
|
if (calcuResult != null && calcuResult.Succeed)
|
{
|
_allCalcuResultDict.Add(working, calcuResult);
|
}
|
}
|
InitialMultiColumns();
|
InitialMultiDataTable();
|
this.bindingSource1.DataSource = _dt;
|
this.bindingSource1.ResetBindings(false);
|
this.gridView1.RefreshData();
|
overlay.Close();
|
}
|
|
|
//初始化单工况列
|
private void InitialSingleColumns()
|
{
|
this.gridView1.Columns.Clear();
|
|
//构件
|
var colRelation = new GridColumn();
|
colRelation.Caption = "构件";
|
colRelation.FieldName = "VisualName";
|
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("VisualName", typeof(string));
|
_dt.Columns.Add("PropName", typeof(string));
|
_dt.Columns.Add("CalcuValue", typeof(string));
|
_dt.Columns.Add("UnitName", typeof(string));
|
|
var monitorList = _allMonitorList?.Where(x => x.SourceType == Yw.Hydro.eSourceType.Analyse).ToList();
|
monitorList = monitorList?.OrderBy(x => x.SortCode).ToList();
|
if (monitorList != null && monitorList.Count > 0)
|
{
|
var allVisualDict = _hydroInfo?.GetVisualDict();
|
if (allVisualDict != null && allVisualDict.Count > 0)
|
{
|
var allCalcuVisualDict = _allCalcuResultDict?.FirstOrDefault().Value?.GetVisualDict();
|
foreach (var monitor in monitorList)
|
{
|
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["VisualName"] = 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 = "VisualName";
|
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("VisualName", 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 monitorList = _allMonitorList?.Where(x => x.SourceType == Yw.Hydro.eSourceType.Analyse).ToList();
|
monitorList = monitorList?.OrderBy(x => x.SortCode).ToList();
|
if (monitorList != null && monitorList.Count > 0)
|
{
|
var allVisualDict = _hydroInfo?.GetVisualDict();
|
if (allVisualDict != null && allVisualDict.Count > 0)
|
{
|
foreach (var monitor in monitorList)
|
{
|
var visual = allVisualDict.GetValue(monitor.Parter);
|
if (visual == null)
|
{
|
continue;
|
}
|
var row = _dt.NewRow();
|
row["Code"] = monitor.Parter;
|
row["VisualName"] = visual.Name;
|
row["PropName"] = HydroMonitorPropHelper.GetName(monitor.PropName);
|
if (_allWorkingList != null && _allWorkingList.Count > 0)
|
{
|
foreach (var working in _allWorkingList)
|
{
|
if (_allCalcuResultDict != null && _allCalcuResultDict.Count > 0)
|
{
|
if (_allCalcuResultDict.ContainsKey(working))
|
{
|
var allCalcuVisualDict = _allCalcuResultDict[working].GetVisualDict();
|
var calcuValue = allCalcuVisualDict?.GetValue(monitor.Parter)?.GetCalcuValue(monitor.PropName);
|
row[working.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);
|
}
|
|
|
}
|
}
|