using DevExpress.XtraCharts; using DevExpress.XtraEditors; using GCAS.Dto; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace GCAS.Record { public partial class CurveForm : XtraForm { public CurveForm(string jsonData, string effectData) { InitializeComponent(); JsonData = jsonData; EffectData = effectData; } public string JsonData { get; private set; } public string EffectData { get; private set; } private void CurveForm_Load(object sender, EventArgs e) { List weights = new List(); List effectWeights = new List(); if (!string.IsNullOrEmpty(JsonData)) { try { weights = JsonConvert.DeserializeObject>(JsonData); effectWeights = JsonConvert.DeserializeObject>(EffectData); if (weights == null || !weights.Any()) { DialogResult = DialogResult.Abort; return; } } catch (Exception) { DialogResult = DialogResult.Abort; } // Create a Chart Control object and add it to the form. ChartControl chart = new ChartControl { Dock = DockStyle.Fill }; Controls.Add(chart); // Create a line series, bind it to data and add to the chart. Series series = new Series("净重", ViewType.Line) { DataSource = weights.Select(c => new DataPointDto(c.Time, c.Weight / 1000F)), ArgumentDataMember = "Date" }; series.ValueDataMembers.AddRange("Value"); chart.Series.Add(series); // Enable series markers. LineSeriesView view = (LineSeriesView)series.View; view.MarkerVisibility = DevExpress.Utils.DefaultBoolean.True; // Display series labels and customize their text format. series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True; series.Label.ResolveOverlappingMode = ResolveOverlappingMode.HideOverlapped; series.Label.TextPattern = "{V:.###}T"; // Create a chart title. ChartTitle chartTitle = new ChartTitle { Text = "称重曲线" }; chart.Titles.Add(chartTitle); // Customize axes. XYDiagram diagram = chart.Diagram as XYDiagram; diagram.AxisX.Label.TextPattern = "{A:ss:fff}"; diagram.AxisY.Label.TextPattern = "{V:.###}T"; diagram.EnableAxisXScrolling = true; diagram.EnableAxisXZooming = true; series.CrosshairLabelPattern = @"时间:{A:ss:fff} 净重:{V:.###}T"; diagram.AxisX.DateTimeScaleOptions.MeasureUnit = DateTimeMeasureUnit.Millisecond; diagram.AxisX.DateTimeScaleOptions.GridSpacing = 5; diagram.AxisX.WholeRange.SideMarginsValue = 2; diagram.AxisY.WholeRange.AlwaysShowZeroLevel = false; // Hide a legend if necessary. chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False; var axisX = ((XYDiagram)chart.Diagram).AxisX; ConstantLine endline = new ConstantLine { Color = Color.Red, AxisValue = effectWeights.First().Time, Name = "结束" }; ConstantLine startline = new ConstantLine { Color = Color.Red, AxisValue = effectWeights.Last().Time, Name = "开始" }; startline.LineStyle.DashStyle = endline.LineStyle.DashStyle = DashStyle.Dash; axisX.ConstantLines.Add(startline); axisX.ConstantLines.Add(endline); } } } }