using DevExpress.XtraEditors;
|
using DevExpress.XtraGrid.Views.BandedGrid;
|
using DevExpress.XtraGrid.Views.Base;
|
using DevExpress.XtraPrinting;
|
using Mapster;
|
using NPOI.OpenXmlFormats.Dml;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.Diagnostics;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using Yw.WinFrmUI.Q3d;
|
|
namespace Yw.WinFrmUI
|
{
|
public partial class HydroEnergyAnalyWorkingListCtrl : DevExpress.XtraEditors.XtraUserControl
|
{
|
public HydroEnergyAnalyWorkingListCtrl()
|
{
|
InitializeComponent();
|
this.bandedGridView1.SetNormalView();
|
this.bandedGridView1.OptionsView.AllowCellMerge = true;
|
}
|
|
private DataTable _dt = null;
|
private Yw.Model.HydroModelInfo _hydroInfo = null;//水力信息
|
private List<HydroWorkingVmo> _allWorkingList = null;//所有工况信息
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroWorkingVmo> allWorkingList
|
)
|
{
|
if (hydroInfo == null)
|
{
|
return;
|
}
|
if (allWorkingList == null || allWorkingList.Count < 1)
|
{
|
return;
|
}
|
_hydroInfo = hydroInfo;
|
_allWorkingList = allWorkingList;
|
InitialColumns(hydroInfo, allWorkingList);
|
InitialDataTable(hydroInfo, allWorkingList);
|
|
}
|
|
|
//初始化列
|
private void InitialColumns(Yw.Model.HydroModelInfo hydroInfo, List<HydroWorkingVmo> allWorkingList)
|
{
|
this.bandedGridView1.Bands.Clear();
|
this.bandedGridView1.Columns.Clear();
|
|
var bandInfo = new GridBand();
|
bandInfo.Caption = "基本信息";
|
bandInfo.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
bandInfo.Visible = true;
|
this.bandedGridView1.Bands.Add(bandInfo);
|
|
var colGroup = new BandedGridColumn();
|
colGroup.Caption = "分组";
|
colGroup.Visible = true;
|
colGroup.FieldName = "BeginGroup";
|
colGroup.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;
|
colGroup.BestFit();
|
this.bandedGridView1.Columns.Add(colGroup);
|
bandInfo.Columns.Add(colGroup);
|
|
var colName = new BandedGridColumn();
|
colName.Caption = "名称";
|
colName.Visible = true;
|
colName.FieldName = "Name";
|
colName.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colName.BestFit();
|
this.bandedGridView1.Columns.Add(colName);
|
bandInfo.Columns.Add(colName);
|
|
if (allWorkingList != null && allWorkingList.Count > 1)
|
{
|
foreach (var working in allWorkingList)
|
{
|
var bandWorking = new GridBand();
|
bandWorking.Caption = working.Name;
|
bandWorking.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
|
bandWorking.Visible = true;
|
this.bandedGridView1.Bands.Add(bandWorking);
|
|
var colLinkStatus = new BandedGridColumn();
|
colLinkStatus.Caption = "运行状态";
|
colLinkStatus.Visible = true;
|
colLinkStatus.FieldName = $"{working.ID}-LinkStatus";
|
colLinkStatus.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colLinkStatus.BestFit();
|
this.bandedGridView1.Columns.Add(colLinkStatus);
|
bandWorking.Columns.Add(colLinkStatus);
|
|
var colCurrentHz = new BandedGridColumn();
|
colCurrentHz.Caption = "设定频率(hz)";
|
colCurrentHz.Visible = true;
|
colCurrentHz.FieldName = $"{working.ID}-CurrentHz";
|
colCurrentHz.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colCurrentHz.BestFit();
|
this.bandedGridView1.Columns.Add(colCurrentHz);
|
bandWorking.Columns.Add(colCurrentHz);
|
|
var colCalcuQ = new BandedGridColumn();
|
colCalcuQ.Caption = "计算流量(m³/h)";
|
colCalcuQ.Visible = true;
|
colCalcuQ.FieldName = $"{working.ID}-CalcuQ";
|
colCalcuQ.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colCalcuQ.BestFit();
|
this.bandedGridView1.Columns.Add(colCalcuQ);
|
bandWorking.Columns.Add(colCalcuQ);
|
|
var colCalcuH = new BandedGridColumn();
|
colCalcuH.Caption = "计算扬程(m)";
|
colCalcuH.Visible = true;
|
colCalcuH.FieldName = $"{working.ID}-CalcuH";
|
colCalcuH.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colCalcuH.BestFit();
|
this.bandedGridView1.Columns.Add(colCalcuH);
|
bandWorking.Columns.Add(colCalcuH);
|
|
var colCalcuP = new BandedGridColumn();
|
colCalcuP.Caption = "计算功率(kW)";
|
colCalcuP.Visible = true;
|
colCalcuP.FieldName = $"{working.ID}-CalcuP";
|
colCalcuP.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colCalcuP.BestFit();
|
this.bandedGridView1.Columns.Add(colCalcuP);
|
bandWorking.Columns.Add(colCalcuP);
|
|
var colCalcuE = new BandedGridColumn();
|
colCalcuE.Caption = "计算效率(%)";
|
colCalcuE.Visible = true;
|
colCalcuE.FieldName = $"{working.ID}-CalcuE";
|
colCalcuE.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
|
colCalcuE.BestFit();
|
this.bandedGridView1.Columns.Add(colCalcuE);
|
bandWorking.Columns.Add(colCalcuE);
|
}
|
}
|
|
}
|
|
//初始化数据
|
private void InitialDataTable(Yw.Model.HydroModelInfo hydroInfo, List<HydroWorkingVmo> allWorkingList)
|
{
|
|
if (hydroInfo == null || hydroInfo.Pumps == null || hydroInfo.Pumps.Count < 1)
|
{
|
return;
|
}
|
|
if (allWorkingList == null || allWorkingList.Count < 2)
|
{
|
return;
|
}
|
|
_dt = new DataTable();
|
_dt.Columns.Add("BeginGroup", typeof(string));
|
_dt.Columns.Add("Name", typeof(string));
|
foreach (var working in allWorkingList)
|
{
|
_dt.Columns.Add($"{working.ID}-LinkStatus", typeof(string));
|
_dt.Columns.Add($"{working.ID}-CurrentHz", typeof(string));
|
_dt.Columns.Add($"{working.ID}-CalcuQ", typeof(string));
|
_dt.Columns.Add($"{working.ID}-CalcuH", typeof(string));
|
_dt.Columns.Add($"{working.ID}-CalcuP", typeof(string));
|
_dt.Columns.Add($"{working.ID}-CalcuE", typeof(string));
|
}
|
|
var dictHydroInfo = new Dictionary<Yw.Vmo.HydroWorkingVmo, Yw.Model.HydroModelInfo>();
|
var dictCalcuResult = new Dictionary<Yw.Vmo.HydroWorkingVmo, Dictionary<string, HydroCalcuVisualResult>>();
|
foreach (var working in allWorkingList)
|
{
|
var hydro = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
|
hydro.UpdateWorkingInfo(working.WorkingInfo);
|
dictHydroInfo.Add(working, hydro);
|
var calcuResult = hydro.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
|
dictCalcuResult.Add(working, calcuResult.GetVisualDict());
|
}
|
|
foreach (var pump in hydroInfo.Pumps)
|
{
|
var row = _dt.NewRow();
|
row["BeginGroup"] = string.IsNullOrEmpty(pump.BeginGroup) ? string.Empty : pump.BeginGroup;
|
row["Name"] = pump.Name;
|
foreach (var working in allWorkingList)
|
{
|
var hydro = dictHydroInfo[working];
|
var calcuResultDict = dictCalcuResult[working];
|
var pumpWorking = hydro.Pumps.Find(x => x.Code == pump.Code);
|
var pumpCalcuResult = calcuResultDict.GetValue(pumpWorking.Code) as HydroCalcuPumpResult;
|
row[$"{working.ID}-LinkStatus"] = HydroLinkStatusHelper.GetStatusName(pumpWorking.LinkStatus);
|
row[$"{working.ID}-CurrentHz"] = Math.Round(pumpWorking.SpeedRatio * pumpWorking.RatedHz, 1).ToString();
|
row[$"{working.ID}-CalcuQ"] = pumpCalcuResult.CalcuQ.HasValue ? Math.Round(pumpCalcuResult.CalcuQ.Value, 1).ToString() : null;
|
row[$"{working.ID}-CalcuH"] = pumpCalcuResult.CalcuH.HasValue ? Math.Round(pumpCalcuResult.CalcuH.Value, 2).ToString() : null;
|
row[$"{working.ID}-CalcuP"] = pumpCalcuResult.CalcuP.HasValue ? Math.Round(pumpCalcuResult.CalcuP.Value, 1).ToString() : null;
|
row[$"{working.ID}-CalcuE"] = pumpCalcuResult.CalcuE.HasValue ? Math.Round(pumpCalcuResult.CalcuE.Value, 1).ToString() : null;
|
}
|
_dt.Rows.Add(row);
|
}
|
this.gridControl1.DataSource = _dt;
|
}
|
|
/// <summary>
|
/// 导出 Xlsx
|
/// </summary>
|
public void ExportToXlsx()
|
{
|
var filePath = FileDialogHelper.SaveFile("导出Excel文件", "Excel文件|*.xlsx");
|
if (string.IsNullOrEmpty(filePath))
|
{
|
return;
|
}
|
var options = new XlsxExportOptions
|
{
|
ExportMode = XlsxExportMode.SingleFile, // 导出模式
|
ShowGridLines = true, // 显示网格线
|
TextExportMode = TextExportMode.Value, // 导出文本模式
|
SheetName = "Sheet1" // 工作表名称
|
};
|
this.bandedGridView1.ExportToXlsx(filePath, options);
|
if (XtraMessageBox.Show("导出成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
|
{
|
Process.Start(new ProcessStartInfo(filePath) { UseShellExecute = true });
|
}
|
}
|
|
|
|
}
|
}
|