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);
|
};
|
}
|
}
|
}
|
|
/// <summary>
|
/// 水力点击信息事件
|
/// </summary>
|
public event Action<HydroVisualInfo> HydroClickInfoEvent;
|
/// <summary>
|
/// 水力点击视图事件
|
/// </summary>
|
public event Action<HydroVisualViewModel> HydroClickViewEvent;
|
/// <summary>
|
/// 水力改变信息事件
|
/// </summary>
|
public event Action<List<HydroVisualInfo>> HydroChangedInfoEvent;
|
/// <summary>
|
/// 水力改变视图事件
|
/// </summary>
|
public event Action<List<HydroVisualViewModel>> HydroChangedViewEvent;
|
|
/// <summary>
|
/// 列表为空时隐藏Page
|
/// </summary>
|
[Browsable(true)]
|
[Display(Name = "列表为空时隐藏Page")]
|
[DisplayName("列表为空时隐藏Page")]
|
public bool HidePageWhenListIsNull
|
{
|
get { return _hidePageWhenListIsNull; }
|
set { _hidePageWhenListIsNull = value; }
|
}
|
private bool _hidePageWhenListIsNull = true;
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
HydroChangeHelper changeHelper = null,
|
HydroPropStatusHelper propStatusHelper = null
|
)
|
{
|
this.SetBindingData(hydroInfo, allCalcuResultVisualDict: null, changeHelper, propStatusHelper);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<HydroCalcuVisualResult> allCalcuResultList,
|
HydroChangeHelper changeHelper = null,
|
HydroPropStatusHelper propStatusHelper = null
|
)
|
{
|
var allCalcuResultVisualDict = allCalcuResultList?.ToDictionary(x => x.Code);
|
SetBindingData(hydroInfo, allCalcuResultVisualDict, changeHelper, propStatusHelper);
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
Dictionary<string, HydroCalcuVisualResult> 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;
|
}
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
public void SetBindingData
|
(
|
List<HydroVisualViewModel> 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;
|
}
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新绑定
|
/// </summary>
|
public void UpdateBindingData()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.UpdateBindingData();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新属性
|
/// </summary>
|
public void UpdateProperty()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.UpdateProperty();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新属性
|
/// </summary>
|
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);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新属性
|
/// </summary>
|
public void UpdateProperty(List<Yw.Model.HydroVisualInfo> 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);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新计算属性
|
/// </summary>
|
public void UpdateCalcuProperty(List<HydroCalcuVisualResult> 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);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 更新计算属性
|
/// </summary>
|
public void UpdateCalcuProperty(Dictionary<string, HydroCalcuVisualResult> 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);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置简单视图
|
/// </summary>
|
public void SetSimpleView()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.SetSimpleView();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置正常视图
|
/// </summary>
|
public void SetNormalView()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.SetNormalView();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置计算视图
|
/// </summary>
|
public void SetCalcuView()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.SetCalcuView();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置批量视图
|
/// </summary>
|
public void SetBulkView()
|
{
|
foreach (var page in this.tabPane1.Pages)
|
{
|
if (page.PageVisible)
|
{
|
if (page.Controls[0] is IHydroVisualList ctrl)
|
{
|
ctrl.SetBulkView();
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 设置结果视图
|
/// </summary>
|
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<GridView> gridViews, List<string> 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<GridView>();
|
var sheetNames = new List<string>();
|
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);
|
|
}
|
|
|
|
|
}
|
|
}
|