using DevExpress.Charts.Native; using DevExpress.XtraCharts; using DevExpress.XtraEditors; using IStation.WinFrmUI.Curve; using System; using System.Collections.Generic; using System.Linq; namespace IStation.WinFrmUI.Monitor { public partial class CurveAnalyzeViewMgrPage : DocumentPage { public CurveAnalyzeViewMgrPage() { InitializeComponent(); this.PageTitle.Caption = "曲线分析视图"; this.gridView1.SetNormalView(); this.gridView1.OptionsView.AllowCellMerge = true; this.gridView1.OptionsView.ShowFooter = true; this.chartControl1.RuntimeHitTesting = true; //this.chartControl1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.chartControl1_MouseDown); } public class CurrentViewModel : Model.CurveAnalyzePoint { public CurrentViewModel() { } public CurrentViewModel(Model.CurveAnalyzePoint rhs) : base(rhs) { this.Round(); } } private List _allValidBindingList = null; private long _monitorDataSourcesId, _curveAnalyzeId; //图 #region Chart private SwiftPlotDiagram _diagram = null; private Series _seriesQH, _seriesQE, _seriesQP; #endregion public void Initial(long monitorDataSourcesId, long curveAnalyzeId) { _monitorDataSourcesId = monitorDataSourcesId; _curveAnalyzeId = curveAnalyzeId; _diagram = this.chartControl1.Diagram as SwiftPlotDiagram; _diagram.EnableAxisXScrolling = true; _diagram.EnableAxisXZooming = true; _diagram.EnableAxisYScrolling = true; _diagram.EnableAxisYZooming = true; _seriesQH = this.chartControl1.GetSeriesByName("SeriesQH"); _seriesQH.CrosshairLabelPattern = "流量:{A:N0} 扬程:{V:N1}"; _seriesQH.View.Color = CurveChartDisplay.PointColorQH; _seriesQH.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True; _seriesQE = this.chartControl1.GetSeriesByName("SeriesQE"); _seriesQE.CrosshairLabelPattern = "流量:{A:N0} 效率:{V:N1}"; _seriesQE.View.Color = CurveChartDisplay.PointColorQE; _seriesQE.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True; _seriesQP = this.chartControl1.GetSeriesByName("SeriesQP"); _seriesQP.CrosshairLabelPattern = "流量:{A:N0} 功率:{V:N0}"; _seriesQP.View.Color = CurveChartDisplay.PointColorQP; _seriesQP.CrosshairHighlightPoints = DevExpress.Utils.DefaultBoolean.True; } /// /// 初始化数据 /// public override void InitialDataSource() { var lays = this.chartControl1.ShowOverlay(); _allValidBindingList = new List(); var packets = new BLL.CurveAnalyzePointPacket().GetValid(_monitorDataSourcesId, _curveAnalyzeId); if (packets != null && packets.Any()) { _allValidBindingList = packets.SelectMany(x => x.Points).Select(x => new CurrentViewModel(x)).ToList(); } if (_allValidBindingList == null) _allValidBindingList = new List(); this.currentViewModelBindingSource.DataSource = _allValidBindingList; this.gridView1.BestFitColumns(); lays.Close(); } //筛选删除 异常流量 private void barBtnAbnormalQ_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allValidBindingList == null || !_allValidBindingList.Any()) { XtraMessageBox.Show("无数据!"); return; } var timeList = _allValidBindingList.Where(x => x.Q <= 0 || x.Q == 0).Select(x => x.Time).ToList(); DeletePoints(timeList); } //筛选删除 异常功率 private void barBtnAbnormalP_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allValidBindingList == null || !_allValidBindingList.Any()) { XtraMessageBox.Show("无数据!"); return; } var timeList = _allValidBindingList.Where(x => x.P == IStation.Error.Default || x.P == 0).Select(x => x.Time).ToList(); DeletePoints(timeList); } //筛选删除 异常效率 private void barBtnAbnormalE_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_allValidBindingList == null || !_allValidBindingList.Any()) { XtraMessageBox.Show("无数据!"); return; } var timeList = _allValidBindingList.Where(x => x.E == IStation.Error.Default || x.E == 0).Select(x => x.Time).ToList(); DeletePoints(timeList); } /// /// 删除点 /// private void DeletePoints(List timeList) { if (timeList == null || timeList.Count < 1) { XtraMessageBox.Show("无数据!"); return; } var lays = this.chartControl1.ShowOverlay(); timeList = timeList.OrderByDescending(x => x).ToList(); var result = new BLL.CurveAnalyzePointPacket().SetInvalid(_monitorDataSourcesId, _curveAnalyzeId, timeList); if (!result) { lays.Close(); XtraMessageBox.Show("删除失败!"); return; } var minTime = timeList.Min(); var maxTime = timeList.Max(); var minIndex = _allValidBindingList.FindIndex(x => x.Time == minTime); var maxIndex = _allValidBindingList.FindIndex(x => x.Time == maxTime); var delIndex = 0; for (int i = maxIndex; i >= minIndex; i--) { var item = _allValidBindingList[i]; for (int j = delIndex; j < timeList.Count; j++) { var delItem = timeList[j]; if (item.Time == delItem) { _allValidBindingList.RemoveAt(i); delIndex = j++; break; } } } InitialDataSource(); lays.Close(); } //无效 private void chartControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { var hitInfo = this.chartControl1.CalcHitInfo(e.Location); if (e.Button == System.Windows.Forms.MouseButtons.Left) { if (hitInfo.InSeries) { var time = hitInfo.SeriesPoint.DateTimeArgument; var index = _allValidBindingList.FindIndex(x => x.Time == time); this.gridView1.FocusedRowHandle = index; } } } #region 菜单 //全部展开 private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.gridView1.ExpandAllGroups(); } //全部折叠 private void barBtnCollapseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.gridView1.CollapseAllGroups(); } //检索 private void barCekSearch_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.barCekSearch.Checked) this.gridView1.ShowFindPanel(); else this.gridView1.HideFindPanel(); } // 刷新数据 private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { InitialDataSource(); } #endregion } }