| | |
| | | using Aspose.Words.Drawing.Charts; |
| | | using DevExpress.CodeParser; |
| | | using DevExpress.XtraBars.Docking; |
| | | using DevExpress.Charts.Native; |
| | | using DevExpress.Utils; |
| | | using DevExpress.XtraCharts; |
| | | using DevExpress.XtraReports.UI; |
| | | using DevExpress.XtraSpreadsheet.Model; |
| | | using NPOI.POIFS.NIO; |
| | | using Org.BouncyCastle.Tls; |
| | | using System; |
| | | using System.Collections; |
| | | using System.ComponentModel; |
| | | using System.Drawing; |
| | | |
| | | namespace HStation.WinFrmUI |
| | | { |
| | |
| | | |
| | | private SimulationPrintViewModel _printViewModel; |
| | | |
| | | public void SetBingdingData(SimulationPrintViewModel viewModel) |
| | | public void SetBingdingData(SimulationPrintViewModel vm) |
| | | { |
| | | _printViewModel = viewModel; |
| | | ininal(); |
| | | } |
| | | // A4设置 827 1169 |
| | | this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4; |
| | | this.Margins = new DevExpress.Drawing.DXMargins(50, 50, 50, 50); |
| | | |
| | | private void ininal() |
| | | { |
| | | this.DataSource = _printViewModel.PumpList; |
| | | this.xrLabel1.DataBindings.Add("Text", _printViewModel.Project, "Name"); |
| | | this.xrTable2.DataBindings.Add("Text", _printViewModel.PumpList, "Name"); |
| | | this.xrTable2.DataBindings.Add("Text", _printViewModel.PumpList, "BeginGroup"); |
| | | // 内容宽度 |
| | | float contentWidth = 727F; // 内容宽度 |
| | | float firstCaptionHeight = 30F; // 一级标题高度 |
| | | float pageHeight = 1069F; // 页面可用高度 |
| | | float currentY = 0F; // 当前Y坐标 |
| | | |
| | | // 创建 XRChart 控件实例 |
| | | XRChart xrChart = new XRChart(); |
| | | foreach (var item in GenerateAllChartData(1)) |
| | | #region 页眉 |
| | | |
| | | var labForCorp = new XRLabel(); |
| | | labForCorp.Name = "页眉"; |
| | | labForCorp.Text = "杭州科维节能技术股份有限公司"; |
| | | labForCorp.Multiline = true; |
| | | labForCorp.LocationFloat = new DevExpress.Utils.PointFloat(482F, 16F); |
| | | labForCorp.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); |
| | | labForCorp.SizeF = new System.Drawing.SizeF(236F, 24F); |
| | | labForCorp.StylePriority.UseTextAlignment = false; |
| | | labForCorp.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; |
| | | this.TopMargin.Controls.Add(labForCorp); |
| | | |
| | | #endregion 页眉 |
| | | |
| | | #region 页脚 |
| | | |
| | | var pageForCurrentNum = new XRPageInfo(); |
| | | pageForCurrentNum.LocationFloat = new DevExpress.Utils.PointFloat(617F, 10.00001F); |
| | | pageForCurrentNum.Name = "页脚"; |
| | | pageForCurrentNum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); |
| | | pageForCurrentNum.SizeF = new System.Drawing.SizeF(100F, 23F); |
| | | pageForCurrentNum.StylePriority.UseTextAlignment = false; |
| | | pageForCurrentNum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; |
| | | pageForCurrentNum.TextFormatString = "第{0}页"; |
| | | this.BottomMargin.Controls.Add(pageForCurrentNum); |
| | | |
| | | #endregion 页脚 |
| | | |
| | | #region 标题 |
| | | |
| | | var labForTitle = new XRLabel(); |
| | | labForTitle.AnchorHorizontal = ((DevExpress.XtraReports.UI.HorizontalAnchorStyles)((DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right))); |
| | | labForTitle.Font = new DevExpress.Drawing.DXFont("Arial", 15F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | labForTitle.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | labForTitle.Multiline = true; |
| | | labForTitle.Name = "labTitle"; |
| | | labForTitle.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F); |
| | | labForTitle.SizeF = new System.Drawing.SizeF(727F, 50F); |
| | | labForTitle.StylePriority.UseFont = false; |
| | | labForTitle.StylePriority.UseTextAlignment = false; |
| | | labForTitle.Text = $"{vm.Project.Name}项目节能报告"; |
| | | labForTitle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; |
| | | this.Detail.Controls.Add(labForTitle); |
| | | currentY += 50F; |
| | | |
| | | #endregion 标题 |
| | | |
| | | #region 一、项目概述 |
| | | |
| | | var labForDescription = CreateFirstCaption("一、项目概述", contentWidth, firstCaptionHeight, 0F, currentY); |
| | | this.Detail.Controls.Add(labForDescription); |
| | | currentY += firstCaptionHeight; |
| | | |
| | | #endregion 一、项目概述 |
| | | |
| | | #region 项目概述内容 |
| | | |
| | | var labForDescriptionContent = new XRLabel(); |
| | | labForDescriptionContent.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); |
| | | labForDescriptionContent.Font = new DevExpress.Drawing.DXFont("Arial", 10F); |
| | | labForDescriptionContent.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | labForDescriptionContent.Multiline = true; |
| | | labForDescriptionContent.Name = "labForDescriptionContent"; |
| | | labForDescriptionContent.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F); |
| | | labForDescriptionContent.SizeF = new System.Drawing.SizeF(727F, 100F); |
| | | labForDescriptionContent.StylePriority.UseFont = false; |
| | | labForDescriptionContent.StylePriority.UseTextAlignment = false; |
| | | labForDescriptionContent.Text = $" {vm.Project.Description}"; |
| | | labForDescriptionContent.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; |
| | | this.Detail.Controls.Add(labForDescriptionContent); |
| | | currentY += 100F; |
| | | |
| | | #endregion 项目概述内容 |
| | | |
| | | // 二、水泵明细 |
| | | var labForPumpList = new XRLabel(); |
| | | labForPumpList.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); |
| | | labForPumpList.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | labForPumpList.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | labForPumpList.Multiline = true; |
| | | labForPumpList.Name = "labForPumpList"; |
| | | labForPumpList.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); |
| | | labForPumpList.SizeF = new System.Drawing.SizeF(727F, 25F); |
| | | labForPumpList.StylePriority.UseFont = false; |
| | | labForPumpList.StylePriority.UseTextAlignment = false; |
| | | labForPumpList.Text = "二、水泵明细"; |
| | | labForPumpList.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; |
| | | this.Detail.Controls.Add(labForPumpList); |
| | | currentY += 25F; |
| | | |
| | | // 水泵明细内容 |
| | | if (vm.PumpList != null && vm.PumpList.Count > 0) |
| | | { |
| | | // 创建一个系列(曲线) |
| | | Series series = new Series(item.SeriesName, ViewType.Spline); |
| | | // 创建 XRTable |
| | | var tableForPumpList = new XRTable(); |
| | | tableForPumpList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | tableForPumpList.SizeF = new SizeF(727F, 30F + vm.PumpList.Count * 25F); // 设置大小 |
| | | |
| | | // 设置系列的数据筛选条件 |
| | | series.FilterString = $"SeriesName = '{item.SeriesName}'"; |
| | | // 创建表头行 |
| | | XRTableRow headerRowPumpList = new XRTableRow(); |
| | | headerRowPumpList.BackColor = Color.LightGray; // 设置背景颜色 |
| | | |
| | | // 设置系列的数据绑定 |
| | | series.ArgumentDataMember = "XValue"; |
| | | series.ValueDataMembers.AddRange(new string[] { "YValue" }); |
| | | // 添加表头列 |
| | | headerRowPumpList.Cells.Add(CreateTableCell("名称", 100)); |
| | | headerRowPumpList.Cells.Add(CreateTableCell("编码", 100)); |
| | | headerRowPumpList.Cells.Add(CreateTableCell("额定流量", 100)); |
| | | headerRowPumpList.Cells.Add(CreateTableCell("额定扬程", 100)); |
| | | headerRowPumpList.Cells.Add(CreateTableCell("额定功率", 100)); |
| | | headerRowPumpList.Cells.Add(CreateTableCell("额定转速", 100)); |
| | | |
| | | // 将系列添加到图表的系列集合中 |
| | | xrChart.Series.Add(series); |
| | | // 将表头行添加到表格 |
| | | tableForPumpList.Rows.Add(headerRowPumpList); |
| | | |
| | | // 遍历水泵 |
| | | foreach (var pump in vm.PumpList) |
| | | { |
| | | // 创建数据行 |
| | | var dataRow = new XRTableRow(); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.Name, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.Code, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.RatedQ.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.RatedH.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.RatedP.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = pump.RatedN.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | tableForPumpList.Rows.Add(dataRow); |
| | | } |
| | | |
| | | // 将表格添加到Detail |
| | | this.Detail.Controls.Add(tableForPumpList); |
| | | currentY += tableForPumpList.HeightF; |
| | | //currentY += vm.PumpList.Count*10; |
| | | } |
| | | xrChart.DataSource = GenerateAllChartData(1); |
| | | //Detail1.Controls.Add(xrChart); |
| | | } |
| | | |
| | | public class ChartDataPoint |
| | | { |
| | | public double XValue { get; set; } // 横坐标值 |
| | | public double YValue { get; set; } // 纵坐标值 |
| | | public string SeriesName { get; set; } // 系列名称,用于区分不同的线 |
| | | } |
| | | |
| | | public List<ChartDataPoint> GenerateAllChartData(int i) |
| | | { |
| | | List<ChartDataPoint> series1Data = new List<ChartDataPoint>(); |
| | | foreach (var item in _printViewModel.WorkingList.First().PumpAnaly.Items[i].RatedCurveQE) |
| | | var labForWorking = CreateFirstCaption("三、工况视图", contentWidth, firstCaptionHeight, 0F, currentY); |
| | | this.Detail.Controls.Add(labForWorking); |
| | | currentY += firstCaptionHeight; |
| | | var labForAccuracy = CreateFirstCaption("(1)、精度评估", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForAccuracy); |
| | | currentY += firstCaptionHeight; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | series1Data.Add(new ChartDataPoint |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | XValue = item.X, |
| | | YValue = item.Y, |
| | | SeriesName = _printViewModel.WorkingList.First().PumpAnaly.Items[i].Name |
| | | }); |
| | | }; |
| | | /*XRChart chart = new XRChart(); |
| | | chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | chart.WidthF = contentWidth; |
| | | chart.HeightF = 300F; |
| | | |
| | | List<ChartDataPoint> series2Data = new List<ChartDataPoint>(); |
| | | foreach (var item in _printViewModel.WorkingList.First().PumpAnaly.Items[i].CurrentCurveQH) |
| | | { |
| | | series2Data.Add(new ChartDataPoint |
| | | { |
| | | XValue = item.X, |
| | | YValue = item.Y, |
| | | SeriesName = _printViewModel.WorkingList.First().PumpAnaly.Items[i].Name |
| | | }); |
| | | }; |
| | | // 创建一个线系列 |
| | | Series series = new Series("Series1", ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var item in working.PumpAnaly.Items[0].RatedCurveQH) |
| | | { |
| | | series.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } |
| | | chart.Series.Add(series); |
| | | Series series2 = new Series("Series2", ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var item in working.PumpAnaly.Items[0].CurrentCurveQE) |
| | | { |
| | | series2.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } |
| | | chart.Series.Add(series2); |
| | | Series series3 = new Series("Series3", ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var item in working.PumpAnaly.Items[0].CurrentCurveQP) |
| | | { |
| | | series3.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } |
| | | chart.Series.Add(series3); |
| | | |
| | | List<ChartDataPoint> series3Data = new List<ChartDataPoint>(); |
| | | foreach (var item in _printViewModel.WorkingList.First().PumpAnaly.Items[i].CurrentCurveQP) |
| | | Detail.Controls.Add(chart); |
| | | currentY += chart.HeightF;*/ |
| | | /* var accuracyFlowChart = CreateAccuracyItem(working.Accuracy.Flow?.AvgError ?? 0, 213F, 250F, 300F, currentY); |
| | | if (currentY + accuracyFlowChart.HeightF > pageHeight) |
| | | { |
| | | accuracyFlowChart.LocationF = new DevExpress.Utils.PointFloat(accuracyFlowChart.LocationF.X, currentY); |
| | | } |
| | | Detail.Controls.Add(accuracyFlowChart); |
| | | currentY += accuracyFlowChart.HeightF; |
| | | |
| | | var accuracyPressChart = CreateAccuracyItem(working.Accuracy.Press?.AvgError ?? 0, 213F, 250F, 513F, currentY); |
| | | if (currentY + accuracyPressChart.HeightF > pageHeight) |
| | | { |
| | | accuracyPressChart.LocationF = new DevExpress.Utils.PointFloat(accuracyPressChart.LocationF.X, currentY); |
| | | } |
| | | Detail.Controls.Add(accuracyPressChart); |
| | | currentY += accuracyPressChart.HeightF;*/ |
| | | var accuracyScaleChart = CreateAccuracyScale(working.Accuracy.Scale, 300F, 230F, currentY); |
| | | Detail.Controls.Add(accuracyScaleChart); |
| | | var accuracyFlowChart = CreateAccuracyItem(working.Accuracy.Flow?.AvgError ?? 0, 213F, 230F, 300F, currentY); |
| | | Detail.Controls.Add(accuracyFlowChart); |
| | | var accuracyPressChart = CreateAccuracyItem(working.Accuracy.Press?.AvgError ?? 0, 213F, 230F, 513F, currentY); |
| | | Detail.Controls.Add(accuracyPressChart); |
| | | currentY += accuracyScaleChart.HeightF; |
| | | } |
| | | currentY += 20F; |
| | | } |
| | | var labForAccuracyList = CreateFirstCaption("(1.1)、评估列表", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForAccuracyList); |
| | | currentY += firstCaptionHeight; |
| | | |
| | | #region 评估列表 |
| | | |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | series3Data.Add(new ChartDataPoint |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | XValue = item.X, |
| | | YValue = item.Y, |
| | | SeriesName = _printViewModel.WorkingList.First().PumpAnaly.Items[i].Name |
| | | }); |
| | | }; |
| | | // 合并所有系列的数据 |
| | | List<ChartDataPoint> allData = new List<ChartDataPoint>(); |
| | | allData.AddRange(series1Data); |
| | | allData.AddRange(series2Data); |
| | | allData.AddRange(series3Data); |
| | | return allData; |
| | | if (working.Accuracy.Items != null && working.Accuracy.Items.Count > 0) |
| | | { // 创建 XRTable |
| | | var tableForAccuracyList = new XRTable(); |
| | | tableForAccuracyList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | tableForAccuracyList.SizeF = new SizeF(727F, 30F + working.Accuracy.Items.Count * 25F); // 设置大小 |
| | | |
| | | // 创建表头行 |
| | | XRTableRow headerRowAccuracyList = new XRTableRow(); |
| | | headerRowAccuracyList.BackColor = Color.LightGray; // 设置背景颜色 |
| | | |
| | | // 添加表头列 |
| | | headerRowAccuracyList.Cells.Add(CreateTableCell("评估构件", 100)); |
| | | headerRowAccuracyList.Cells.Add(CreateTableCell("评估项", 100)); |
| | | headerRowAccuracyList.Cells.Add(CreateTableCell("监测值", 100)); |
| | | headerRowAccuracyList.Cells.Add(CreateTableCell("计算值", 100)); |
| | | headerRowAccuracyList.Cells.Add(CreateTableCell("评估误差", 100)); |
| | | |
| | | // 将表头行添加到表格 |
| | | tableForAccuracyList.Rows.Add(headerRowAccuracyList); |
| | | |
| | | foreach (var item in working.Accuracy.Items) |
| | | { |
| | | // 创建数据行 |
| | | var dataRow = new XRTableRow(); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.EvaluateName, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.EvaluateItem, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.MonitorValue.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.CalcuValue.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.EvaluateError?.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | tableForAccuracyList.Rows.Add(dataRow); |
| | | } |
| | | // 将表格添加到Detail |
| | | this.Detail.Controls.Add(tableForAccuracyList); |
| | | currentY += tableForAccuracyList.HeightF; |
| | | } |
| | | } |
| | | currentY += 20F; |
| | | } |
| | | |
| | | #endregion 评估列表 |
| | | |
| | | #region 水泵分析 |
| | | |
| | | var labForPump = CreateFirstCaption("(2)、水泵分析", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForPump); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | if (working.PumpAnaly != null && working.PumpAnaly.Items != null && working.PumpAnaly.Items.Count > 0) |
| | | { |
| | | foreach (var item in working.PumpAnaly.Items) |
| | | { |
| | | var label = CreateFirstCaption(item.Name, contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(label); |
| | | currentY += 20F; |
| | | |
| | | XRChart chart = new XRChart(); |
| | | ((System.ComponentModel.ISupportInitialize)(chart)).BeginInit(); |
| | | chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | chart.WidthF = contentWidth; |
| | | chart.HeightF = 700F; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | |
| | | // 创建 XY 图表 |
| | | XYDiagram xyDiagram = new XYDiagram(); |
| | | ((System.ComponentModel.ISupportInitialize)(xyDiagram)).BeginInit(); |
| | | |
| | | // 配置主 X 轴 |
| | | xyDiagram.AxisX.Title.Text = "流量(m³/h)"; |
| | | xyDiagram.AxisX.Title.Visibility = DefaultBoolean.True; |
| | | xyDiagram.AxisX.Visibility = DefaultBoolean.True; |
| | | xyDiagram.AxisX.Alignment = AxisAlignment.Far; // 将 X 轴设置在图表底部 |
| | | |
| | | // 配置主 Y 轴 |
| | | xyDiagram.AxisY.Title.Text = "扬程/m"; |
| | | xyDiagram.AxisY.Title.Visibility = DefaultBoolean.True; |
| | | xyDiagram.AxisY.Visibility = DefaultBoolean.True; |
| | | |
| | | // 创建两个面板 |
| | | XYDiagramPane pane1 = new XYDiagramPane(); |
| | | pane1.Name = "Pane 1"; |
| | | xyDiagram.Panes.Add(pane1); |
| | | |
| | | XYDiagramPane pane2 = new XYDiagramPane(); |
| | | pane2.Name = "Pane 2"; |
| | | xyDiagram.Panes.Add(pane2); |
| | | |
| | | // 创建次要 Y 轴 |
| | | SecondaryAxisY secondaryAxisY1 = new SecondaryAxisY("Secondary Y-Axis 1"); |
| | | secondaryAxisY1.Title.Text = "功率"; |
| | | secondaryAxisY1.Title.Visibility = DefaultBoolean.True; |
| | | secondaryAxisY1.Visibility = DefaultBoolean.True; |
| | | xyDiagram.SecondaryAxesY.Add(secondaryAxisY1); |
| | | |
| | | SecondaryAxisY secondaryAxisY2 = new SecondaryAxisY("Secondary Y-Axis 2"); |
| | | secondaryAxisY2.Title.Text = "效率"; |
| | | secondaryAxisY2.Title.Visibility = DefaultBoolean.True; |
| | | secondaryAxisY2.Visibility = DefaultBoolean.True; |
| | | xyDiagram.SecondaryAxesY.Add(secondaryAxisY2); |
| | | |
| | | chart.Diagram = xyDiagram; |
| | | ((System.ComponentModel.ISupportInitialize)(xyDiagram)).EndInit(); |
| | | ((System.ComponentModel.ISupportInitialize)(chart)).EndInit(); |
| | | |
| | | // 创建第一个系列 |
| | | Series series1 = new Series("Series 1", ViewType.Spline); |
| | | foreach (var qh in item.RatedCurveQH) |
| | | { |
| | | series1.Points.Add(new SeriesPoint(qh.X, qh.Y)); |
| | | } |
| | | series1.LabelsVisibility = DefaultBoolean.False; |
| | | chart.Series.Add(series1); |
| | | // 创建第二个系列 |
| | | Series series2 = new Series("Series 2", ViewType.Spline); |
| | | foreach (var qe in item.RatedCurveQE) |
| | | { |
| | | series2.Points.Add(new SeriesPoint(qe.X, qe.Y)); |
| | | } |
| | | ((XYDiagramSeriesViewBase)series2.View).Pane = pane2; |
| | | ((XYDiagramSeriesViewBase)series2.View).AxisY = secondaryAxisY2; |
| | | series2.LabelsVisibility = DefaultBoolean.False; |
| | | chart.Series.Add(series2); |
| | | // 创建第三个系列 |
| | | Series series3 = new Series("Series 3", ViewType.Spline); |
| | | foreach (var qp in item.RatedCurveQP) |
| | | { |
| | | series3.Points.Add(new SeriesPoint(qp.X, qp.Y)); |
| | | } |
| | | ((XYDiagramSeriesViewBase)series3.View).Pane = pane1; |
| | | ((XYDiagramSeriesViewBase)series3.View).AxisY = secondaryAxisY1; |
| | | series3.LabelsVisibility = DefaultBoolean.False; |
| | | chart.Series.Add(series3); |
| | | |
| | | Detail.Controls.Add(chart); |
| | | currentY += chart.HeightF; |
| | | } |
| | | } |
| | | } |
| | | currentY += 20F; |
| | | } |
| | | |
| | | #endregion 水泵分析 |
| | | |
| | | #region 监测分析 |
| | | |
| | | var labForMonitor = CreateFirstCaption("(3)、监测分析", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForMonitor); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | if (working.MonitorAnaly.Items != null && working.MonitorAnaly.Items.Count > 0) |
| | | { // 创建 XRTable |
| | | var tableForMonitorList = new XRTable(); |
| | | tableForMonitorList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | tableForMonitorList.SizeF = new SizeF(727F, 30F + working.MonitorAnaly.Items.Count * 25F); // 设置大小 |
| | | |
| | | // 创建表头行 |
| | | XRTableRow headerRowMonitorList = new XRTableRow(); |
| | | headerRowMonitorList.BackColor = Color.LightGray; // 设置背景颜色 |
| | | |
| | | // 添加表头列 |
| | | headerRowMonitorList.Cells.Add(CreateTableCell("构件", 100)); |
| | | headerRowMonitorList.Cells.Add(CreateTableCell("属性", 100)); |
| | | headerRowMonitorList.Cells.Add(CreateTableCell("计算值", 100)); |
| | | headerRowMonitorList.Cells.Add(CreateTableCell("单位", 100)); |
| | | |
| | | // 将表头行添加到表格 |
| | | tableForMonitorList.Rows.Add(headerRowMonitorList); |
| | | |
| | | foreach (var item in working.MonitorAnaly.Items) |
| | | { |
| | | // 创建数据行 |
| | | var dataRow = new XRTableRow(); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.VisualName, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.PropName, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.CalcuValue?.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.UnitName, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | tableForMonitorList.Rows.Add(dataRow); |
| | | } |
| | | // 将表格添加到Detail |
| | | this.Detail.Controls.Add(tableForMonitorList); |
| | | currentY += tableForMonitorList.HeightF; |
| | | currentY += 20F; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion 监测分析 |
| | | |
| | | #region 能耗分析 |
| | | |
| | | var labForEnergyAnaly = CreateFirstCaption("(4)、能耗分析", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForEnergyAnaly); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | if (working.EnergyAnaly != null) |
| | | { |
| | | if (working.EnergyAnaly.Items != null && working.EnergyAnaly.Items.Count > 0) |
| | | { |
| | | var group = working.EnergyAnaly.Items.GroupBy(x => x.BeginGroup).ToArray(); |
| | | foreach (var item in group) |
| | | { |
| | | var label = CreateFirstCaption(item.Key, contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(label); |
| | | currentY += 20F; |
| | | |
| | | XRChart chartQh = new XRChart(); |
| | | chartQh.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | chartQh.WidthF = contentWidth; |
| | | chartQh.HeightF = 300F; |
| | | |
| | | XRChart chartQE = new XRChart(); |
| | | chartQE.LocationF = new DevExpress.Utils.PointFloat(0F, currentY + chartQh.HeightF); |
| | | chartQE.WidthF = contentWidth; |
| | | chartQE.HeightF = 300F; |
| | | |
| | | XRChart chartQP = new XRChart(); |
| | | chartQP.LocationF = new DevExpress.Utils.PointFloat(0F, currentY + chartQh.HeightF + chartQE.HeightF); |
| | | chartQP.WidthF = contentWidth; |
| | | chartQP.HeightF = 300F; |
| | | |
| | | foreach (var valve in item) |
| | | { |
| | | // 创建一个线系列 |
| | | Series series = new Series(valve.Code, ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var qh in valve.CurrentCurveQH) |
| | | { |
| | | series.Points.Add(new SeriesPoint(qh.X.ToString(), qh.Y.ToString())); |
| | | } |
| | | chartQh.Series.Add(series); |
| | | |
| | | Series series2 = new Series("Series2", ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var qe in valve.CurrentCurveQE) |
| | | { |
| | | series2.Points.Add(new SeriesPoint(qe.X.ToString(), qe.Y.ToString())); |
| | | } |
| | | chartQE.Series.Add(series2); |
| | | |
| | | Series series3 = new Series("Series3", ViewType.Spline); |
| | | // 添加数据点 |
| | | foreach (var qp in valve.CurrentCurveQP) |
| | | { |
| | | series3.Points.Add(new SeriesPoint(qp.X.ToString(), qp.Y.ToString())); |
| | | } |
| | | chartQP.Series.Add(series3); |
| | | } |
| | | |
| | | this.Detail.Controls.Add(chartQh); |
| | | this.Detail.Controls.Add(chartQE); |
| | | this.Detail.Controls.Add(chartQP); |
| | | |
| | | currentY += chartQh.HeightF + chartQE.HeightF + chartQP.HeightF; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion 能耗分析 |
| | | |
| | | //能效明细 |
| | | var labForEnergyDetails = CreateFirstCaption("(4.1)、能效明细", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForEnergyDetails); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | if (working.EnergyAnaly.Items != null && working.EnergyAnaly.Items.Count > 0) |
| | | { |
| | | // 创建 XRTable |
| | | var tableForEnergyDetails = new XRTable(); |
| | | tableForEnergyDetails.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | tableForEnergyDetails.SizeF = new SizeF(727F, 30F + working.EnergyAnaly.Items.Count * 25F); // 设置大小 |
| | | |
| | | // 创建表头行 |
| | | XRTableRow headerRowEnergyDetails = new XRTableRow(); |
| | | headerRowEnergyDetails.BackColor = Color.LightGray; // 设置背景颜色 |
| | | |
| | | // 添加表头列 |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("分组", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("名称", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("运行状态", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("设定评率(hz)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("设定流量(m³/h)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("进口压力(m)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("出口压力(m)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("扬程(m)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("功率(Kw)", 100)); |
| | | headerRowEnergyDetails.Cells.Add(CreateTableCell("效率(%)", 100)); |
| | | // 将表头行添加到表格 |
| | | tableForEnergyDetails.Rows.Add(headerRowEnergyDetails); |
| | | |
| | | foreach (var item in working.EnergyAnaly.Items) |
| | | { |
| | | // 创建数据行 |
| | | var dataRow = new XRTableRow(); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.BeginGroup, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.Name, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.LinkStatus, |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.CurrentHz.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | dataRow.Cells.Add(new XRTableCell() |
| | | { |
| | | Text = item.RatedHz.ToString(), |
| | | WidthF = 100F, |
| | | TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter, |
| | | Borders = DevExpress.XtraPrinting.BorderSide.All |
| | | }); |
| | | tableForEnergyDetails.Rows.Add(dataRow); |
| | | } |
| | | // 将表格添加到Detail |
| | | this.Detail.Controls.Add(tableForEnergyDetails); |
| | | currentY += tableForEnergyDetails.HeightF; |
| | | currentY += 20F; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #region 损失曲线 |
| | | |
| | | var labForLossCurve = CreateFirstCaption("(5)、损失曲线", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForLossCurve); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | if (working.LossCurve != null && working.LossCurve.Items != null) |
| | | { |
| | | XRChart chart = new XRChart(); |
| | | chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY); |
| | | chart.WidthF = contentWidth; |
| | | chart.HeightF = 300F; |
| | | |
| | | // 创建一个线系列 |
| | | Series series = new Series("Series1", ViewType.Area); |
| | | Series series2 = new Series("Series2", ViewType.Area); |
| | | Series series3 = new Series("Series3", ViewType.Area); |
| | | // 添加数据点 |
| | | foreach (var item in working.LossCurve.End.Items) |
| | | { |
| | | series.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } |
| | | // 添加数据点 |
| | | foreach (var item in working.LossCurve.Start.Items) |
| | | { |
| | | series2.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } // 添加数据点 |
| | | foreach (var item in working.LossCurve.Elev.Items) |
| | | { |
| | | series3.Points.Add(new SeriesPoint(item.X, item.Y)); |
| | | } |
| | | |
| | | chart.Series.Add(series); |
| | | chart.Series.Add(series2); |
| | | chart.Series.Add(series3); |
| | | Detail.Controls.Add(chart); |
| | | currentY += chart.HeightF; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion 损失曲线 |
| | | |
| | | #region 损失统计 |
| | | |
| | | var labForLossStatistics = CreateFirstCaption("(6)、损失统计", contentWidth - 25F, 15F, 20F, currentY); |
| | | this.Detail.Controls.Add(labForLossStatistics); |
| | | currentY += 20F; |
| | | if (vm.WorkingList != null && vm.WorkingList.Count > 0) |
| | | { |
| | | foreach (var working in vm.WorkingList) |
| | | { |
| | | var accuracyScaleChart = CreateLossStatistics(working.LossStatistics, 350F, 230F, 0F, currentY); |
| | | Detail.Controls.Add(accuracyScaleChart); |
| | | var EnergyLossChart = CreateEnergyLoss(working.LossStatistics, 377F, 230F, 350F, currentY); |
| | | Detail.Controls.Add(EnergyLossChart); |
| | | currentY += accuracyScaleChart.HeightF; |
| | | var CategoryChart = CreateCategory(working.LossStatistics, 727F, 230F, 0F, currentY); |
| | | Detail.Controls.Add(CategoryChart); |
| | | } |
| | | } |
| | | |
| | | #endregion 损失统计 |
| | | } |
| | | |
| | | public class Product |
| | | //创建一级标题 |
| | | private XRLabel CreateFirstCaption(string caption, float sizeX, float sizeY, float locationX, float locationY) |
| | | { |
| | | public string Name { get; set; } |
| | | public decimal Code { get; set; } |
| | | var lab = new XRLabel(); |
| | | lab.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right); |
| | | lab.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | lab.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); |
| | | lab.Multiline = true; |
| | | lab.Name = "lab"; |
| | | lab.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F); |
| | | lab.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | lab.StylePriority.UseFont = false; |
| | | lab.StylePriority.UseTextAlignment = false; |
| | | lab.Text = caption; |
| | | lab.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; |
| | | return lab; |
| | | } |
| | | |
| | | public List<Product> CreateSampleProductList() |
| | | //创建精度比例 |
| | | private XRChart CreateAccuracyScale(SimulationPrintAccuracyScaleViewModel scale, float sizeX, float sizeY, float locationY) |
| | | { |
| | | List<Product> products = new List<Product> |
| | | { |
| | | new Product { Name = "苹果", Code = 5.99m }, |
| | | new Product { Name = "香蕉", Code = 3.99m }, |
| | | new Product { Name = "橙子", Code = 4.99m } |
| | | }; |
| | | var chart = new XRChart(); |
| | | chart.BackColor = System.Drawing.Color.Transparent; |
| | | chart.BorderColor = System.Drawing.Color.Black; |
| | | chart.Borders = DevExpress.XtraPrinting.BorderSide.All; |
| | | chart.Legend.Name = "Default Legend"; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | chart.LocationFloat = new DevExpress.Utils.PointFloat(0F, locationY); |
| | | chart.Name = "chart"; |
| | | chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); |
| | | |
| | | return products; |
| | | var series = new DevExpress.XtraCharts.Series(); |
| | | series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Name = "Series"; |
| | | var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); |
| | | doughnutSeriesView.HoleRadiusPercent = 45; |
| | | doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | doughnutSeriesView.TotalLabel.Visible = true; |
| | | series.View = doughnutSeriesView; |
| | | series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Label.TextPattern = "{A}:{VP:P1}"; |
| | | chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; |
| | | chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | chart.StylePriority.UseBackColor = false; |
| | | chart.StylePriority.UsePadding = false; |
| | | if (scale != null) |
| | | { |
| | | if (scale.Items != null && scale.Items.Count > 0) |
| | | { |
| | | foreach (var item in scale.Items) |
| | | { |
| | | series.Points.Add(new SeriesPoint(item.EvaluateItem, item.EvaluateCount)); |
| | | } |
| | | } |
| | | doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", (scale.AvgError ?? 0) / 100F); |
| | | } |
| | | return chart; |
| | | } |
| | | |
| | | //创建能量输入 |
| | | private XRChart CreateLossStatistics(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY) |
| | | { |
| | | var chart = new XRChart(); |
| | | chart.BackColor = System.Drawing.Color.Transparent; |
| | | chart.BorderColor = System.Drawing.Color.Black; |
| | | chart.Borders = DevExpress.XtraPrinting.BorderSide.All; |
| | | chart.Legend.Name = "Default Legend"; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); |
| | | chart.Name = "chart"; |
| | | chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); |
| | | |
| | | var series = new DevExpress.XtraCharts.Series(); |
| | | series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Name = "Series"; |
| | | var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); |
| | | doughnutSeriesView.HoleRadiusPercent = 45; |
| | | doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | doughnutSeriesView.TotalLabel.Visible = true; |
| | | series.View = doughnutSeriesView; |
| | | series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Label.TextPattern = "{A}:{VP:P1}"; |
| | | chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; |
| | | chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | chart.StylePriority.UseBackColor = false; |
| | | chart.StylePriority.UsePadding = false; |
| | | if (statistics != null) |
| | | { |
| | | if (statistics.Input.Items != null && statistics.Input.Items.Count > 0) |
| | | { |
| | | foreach (var item in statistics.Input.Items) |
| | | { |
| | | series.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue)); |
| | | } |
| | | } |
| | | doughnutSeriesView.TotalLabel.TextPattern = $"总能量:{statistics.Input.TotalEnergyValue:P0}"; |
| | | } |
| | | return chart; |
| | | } |
| | | |
| | | //创建能量统计 |
| | | private XRChart CreateCategory(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY) |
| | | { |
| | | var chart = new XRChart(); |
| | | chart.BackColor = System.Drawing.Color.Transparent; |
| | | chart.BorderColor = System.Drawing.Color.Black; |
| | | chart.Borders = DevExpress.XtraPrinting.BorderSide.All; |
| | | chart.Legend.Name = "Default Legend"; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); |
| | | chart.Name = "chart"; |
| | | chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); |
| | | chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | chart.StylePriority.UseBackColor = false; |
| | | chart.StylePriority.UsePadding = false; |
| | | if (statistics != null) |
| | | { |
| | | if (statistics.Category != null && statistics.Category.Items.Count > 0) |
| | | { |
| | | foreach (var item in statistics.Category.Items) |
| | | { |
| | | var series1 = new Series(item.EnergyName, ViewType.Bar); |
| | | series1.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue)); |
| | | // 获取系列视图并转换为 BarSeriesView 类型 |
| | | BarSeriesView barSeriesView = (BarSeriesView)series1.View; |
| | | series1.Label.TextPattern = "{V} KW"; |
| | | // 设置柱子宽度,这里设置为 0.8,可根据需要调整 |
| | | barSeriesView.BarWidth = 2.5; |
| | | // 将系列添加到图表中 |
| | | chart.Series.Add(series1); |
| | | } |
| | | } |
| | | } |
| | | return chart; |
| | | } |
| | | |
| | | //创建能量损失 |
| | | private XRChart CreateEnergyLoss(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY) |
| | | { |
| | | var chart = new XRChart(); |
| | | chart.BackColor = System.Drawing.Color.Transparent; |
| | | chart.BorderColor = System.Drawing.Color.Black; |
| | | chart.Borders = DevExpress.XtraPrinting.BorderSide.All; |
| | | chart.Legend.Name = "Default Legend"; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); |
| | | chart.Name = "chart"; |
| | | chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); |
| | | |
| | | var series = new DevExpress.XtraCharts.Series(); |
| | | series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Name = "Series"; |
| | | var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); |
| | | doughnutSeriesView.HoleRadiusPercent = 45; |
| | | doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | doughnutSeriesView.TotalLabel.Visible = true; |
| | | series.View = doughnutSeriesView; |
| | | series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True; |
| | | series.Label.TextPattern = "{A}:{VP:P1}"; |
| | | chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; |
| | | chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | chart.StylePriority.UseBackColor = false; |
| | | chart.StylePriority.UsePadding = false; |
| | | if (statistics != null) |
| | | { |
| | | if (statistics.Catalog != null && statistics.Catalog.Items.Count > 0) |
| | | { |
| | | foreach (var item in statistics.Catalog.Items) |
| | | { |
| | | series.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue)); |
| | | } |
| | | } |
| | | doughnutSeriesView.TotalLabel.TextPattern = $"总损失:{statistics.Input.TotalEnergyValue:P0}"; |
| | | } |
| | | return chart; |
| | | } |
| | | |
| | | //创建精度项 |
| | | private XRChart CreateAccuracyItem(double value, float sizeX, float sizeY, float locationX, float locationY) |
| | | { |
| | | var chart = new XRChart(); |
| | | chart.BackColor = System.Drawing.Color.Transparent; |
| | | chart.BorderColor = System.Drawing.Color.Black; |
| | | chart.Borders = DevExpress.XtraPrinting.BorderSide.All; |
| | | chart.Legend.Name = "Default Legend"; |
| | | chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; |
| | | chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY); |
| | | chart.Name = "chart"; |
| | | chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F); |
| | | chart.PaletteRepository.Add("Palette 1", new DevExpress.XtraCharts.Palette("Palette 1", DevExpress.XtraCharts.PaletteScaleMode.Repeat, new DevExpress.XtraCharts.PaletteEntry[] { |
| | | new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197))))), System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197)))))), |
| | | new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))), System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))))})); |
| | | chart.PaletteName = "Palette 1"; |
| | | |
| | | var series = new DevExpress.XtraCharts.Series(); |
| | | series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False; |
| | | series.Name = "Series"; |
| | | var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView(); |
| | | doughnutSeriesView.HoleRadiusPercent = 45; |
| | | doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold); |
| | | doughnutSeriesView.TotalLabel.Visible = true; |
| | | series.View = doughnutSeriesView; |
| | | chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series }; |
| | | chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY); |
| | | chart.StylePriority.UseBackColor = false; |
| | | chart.StylePriority.UsePadding = false; |
| | | |
| | | var otherValue = 100 - value; |
| | | series.Points.Add(new SeriesPoint("误差", value)); |
| | | series.Points.Add(new SeriesPoint("其他", otherValue)); |
| | | |
| | | doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", value / 100f); |
| | | return chart; |
| | | } |
| | | |
| | | // 创建表头单元格 |
| | | private XRTableCell CreateTableCell(string text, int width) |
| | | { |
| | | XRTableCell cell = new XRTableCell(); |
| | | cell.Text = text; |
| | | cell.Width = width; |
| | | cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; // 文本居中 |
| | | cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 设置边框 |
| | | return cell; |
| | | } |
| | | |
| | | // 创建数据绑定单元格 |
| | | private XRTableCell CreateTableCellWithBinding(string dataMember, int width) |
| | | { |
| | | XRTableCell cell = new XRTableCell(); |
| | | cell.DataBindings.Add(new XRBinding("Text", null, dataMember)); // 绑定数据字段 |
| | | cell.Width = width; |
| | | cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; // 文本左对齐 |
| | | cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 设置边框 |
| | | return cell; |
| | | } |
| | | } |
| | | } |