using DevExpress.Xpo.Helpers; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Grid; using DevExpress.XtraPrinting; using DevExpress.XtraPrintingLinks; using System.Diagnostics; using Yw.EPAnet; using Yw.Model; namespace Yw.WinFrmUI { public partial class HydroVisualListCtrl : DevExpress.XtraEditors.XtraUserControl { public HydroVisualListCtrl() { InitializeComponent(); foreach (var page in this.tabPane1.Pages) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.HydroClickInfoEvent += (visual) => { this.HydroClickInfoEvent?.Invoke(visual); }; ctrl.HydroClickViewEvent += (view) => { this.HydroClickViewEvent?.Invoke(view); }; ctrl.HydroChangedInfoEvent += (visualList) => { this.HydroChangedInfoEvent?.Invoke(visualList); }; ctrl.HydroChangedViewEvent += (viewList) => { this.HydroChangedViewEvent?.Invoke(viewList); }; } } } /// /// 水力点击信息事件 /// public event Action HydroClickInfoEvent; /// /// 水力点击视图事件 /// public event Action HydroClickViewEvent; /// /// 水力改变信息事件 /// public event Action> HydroChangedInfoEvent; /// /// 水力改变视图事件 /// public event Action> HydroChangedViewEvent; /// /// 列表为空时隐藏Page /// [Browsable(true)] [Display(Name = "列表为空时隐藏Page")] [DisplayName("列表为空时隐藏Page")] public bool HidePageWhenListIsNull { get { return _hidePageWhenListIsNull; } set { _hidePageWhenListIsNull = value; } } private bool _hidePageWhenListIsNull = true; /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null ) { this.SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper); } /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, List allCalcuResultList, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null ) { var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code); SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper); } /// /// 绑定数据 /// public void SetBindingData ( Yw.Model.HydroModelInfo hydroInfo, Dictionary allCalcuResultVisualDict, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null ) { if (hydroInfo == null) { return; } foreach (var page in this.tabPane1.Pages) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper); if (HidePageWhenListIsNull) { if (!ctrl.HasHydroList) { page.PageVisible = false; } } } } } /// /// 绑定数据 /// public void SetBindingData ( List allVisualViewModelList, HydroChangeHelper changeHelper = null, HydroPropStatusHelper propStatusHelper = null ) { if (allVisualViewModelList == null || allVisualViewModelList.Count < 1) { return; } foreach (var page in this.tabPane1.Pages) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetBindingData(allVisualViewModelList, changeHelper, propStatusHelper); if (HidePageWhenListIsNull) { if (!ctrl.HasHydroList) { page.PageVisible = false; } } } } } /// /// 更新绑定 /// public void UpdateBindingData() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateBindingData(); } } } } /// /// 更新属性 /// public void UpdateProperty() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateProperty(); } } } } /// /// 更新属性 /// public void UpdateProperty(Yw.Model.HydroVisualInfo visual) { if (visual == null) { return; } foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateProperty(visual); } } } } /// /// 更新属性 /// public void UpdateProperty(List visualList) { if (visualList == null || visualList.Count < 1) { return; } foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateProperty(visualList); } } } } /// /// 更新计算属性 /// public void UpdateCalcuProperty(List allCalcuResultList) { if (allCalcuResultList == null || allCalcuResultList.Count < 1) { return; } foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateCalcuProperty(allCalcuResultList); } } } } /// /// 更新计算属性 /// public void UpdateCalcuProperty(Dictionary allCalcuResultVisualDict) { if (allCalcuResultVisualDict == null || allCalcuResultVisualDict.Count < 1) { return; } foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.UpdateCalcuProperty(allCalcuResultVisualDict); } } } } /// /// 设置简单视图 /// public void SetSimpleView() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetSimpleView(); } } } } /// /// 设置正常视图 /// public void SetNormalView() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetNormalView(); } } } } /// /// 设置计算视图 /// public void SetCalcuView() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetCalcuView(); } } } } /// /// 设置批量视图 /// public void SetBulkView() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetBulkView(); } } } } /// /// 设置结果视图 /// public void SetResultView() { foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { ctrl.SetResultView(); } } } } //导出多gridview到Excel private void ExportMultipleGridViewsToExcel(List gridViews, List sheetNames, string filePath) { if (gridViews == null || gridViews.Count < 1) { return; } if (sheetNames == null || sheetNames.Count < 1) { return; } if (gridViews.Count != sheetNames.Count) { return; } WaitFormHelper.ShowWaitForm("正在导出,请稍后..."); // 创建一个 PrintingSystem 对象 PrintingSystem printingSystem = new PrintingSystem(); // 创建一个 CompositeLink 对象,用于组合多个 GridView CompositeLink compositeLink = new CompositeLink(printingSystem); // 遍历每个 GridView,将其添加到 CompositeLink 中 for (int i = 0; i < gridViews.Count; i++) { // 创建一个 PrintableComponentLink,用于导出 GridView PrintableComponentLink link = new PrintableComponentLink(printingSystem); link.Component = gridViews[i].GridControl; // 将 PrintableComponentLink 添加到 CompositeLink 中 compositeLink.Links.Add(link); } //自定义sheet名称 compositeLink.PrintingSystem.XlSheetCreated += (sender, e) => { var sheetName = sheetNames[e.Index]; e.SheetName = sheetName; }; //compositeLink.Landscape = true; compositeLink.CreatePageForEachLink(); // 设置 Excel 导出选项 var options = new XlsxExportOptions { ExportMode = XlsxExportMode.SingleFilePageByPage, // 每个 GridView 导出到一个单独的工作表 TextExportMode = TextExportMode.Value, // 导出文本模式 SheetName = "Sheet" // 工作表名称前缀(如果不设置,默认使用 Sheet1, Sheet2 等) }; // 导出到 Excel 文件 using (FileStream stream = new FileStream(filePath, FileMode.Create)) { compositeLink.ExportToXlsx(stream, options); } // 释放资源 printingSystem.Dispose(); WaitFormHelper.HideWaitForm(); if (XtraMessageBox.Show("导出成功,是否打开文件?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { Process.Start(new ProcessStartInfo(filePath) { UseShellExecute = true }); } } //导出Excel private void btnExportToXlsx_Click(object sender, EventArgs e) { var filePath = FileDialogHelper.SaveFile("导出Excel文件", "Excel文件|*.xlsx"); if (string.IsNullOrEmpty(filePath)) { return; } var gridViews = new List(); var sheetNames = new List(); foreach (var page in this.tabPane1.Pages) { if (page.PageVisible) { if (page.Controls[0] is IHydroVisualList ctrl) { gridViews.Add(ctrl.GetGridView()); sheetNames.Add(page.Caption); } } } ExportMultipleGridViewsToExcel(gridViews, sheetNames, filePath); } } }