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