1. 程式人生 > 其它 >Dev的Chart控制元件資料繫結winform

Dev的Chart控制元件資料繫結winform

1、折線圖

圖示效果:

程式碼:

public void Init()
        {
            ChartControl.BeginInit();
            ChartControl.SeriesDataMember = "SensorKey";
            ChartControl.SeriesTemplate.SetDataMembers("SensorIndex", "SensorValue");
            ChartControl.SeriesTemplate.CrosshairLabelPattern = "{SensorKey}\n Index:{A:0}  值:{V:0.000 mm}  時間:{FullDate}
"; LineSeriesView view = new LineSeriesView(); view.LineStyle.Thickness = 2; view.LineStyle.LineJoin = LineJoin.Round; ChartControl.SeriesTemplate.View = view; ChartControl.DataSource = ReadDataFromFile(); XYDiagram diagram = new
XYDiagram(); diagram.EnableAxisXScrolling = true; diagram.EnableAxisXZooming = true; diagram.EnableAxisYScrolling = true; diagram.EnableAxisYZooming = true; diagram.AxisX.WholeRange.AlwaysShowZeroLevel = false; diagram.AxisX.Title.Text
= "MySensor"; diagram.AxisX.Title.Visibility = DefaultBoolean.True; diagram.AxisX.WholeRange.SideMarginsValue = 1; diagram.AxisX.WholeRange.SetMinMaxValues(1, i); //diagram.AxisX.Label.TextPattern = " {A:0.}";//x軸文字格式 ChartControl.Diagram = diagram; ChartControl.Legend.MarkerMode = LegendMarkerMode.CheckBoxAndMarker; ChartControl.Legend.Border.Visibility = DefaultBoolean.False;//能見度 ChartControl.Legend.BackColor = Color.Transparent; ChartControl.Legend.Direction = LegendDirection.TopToBottom;//CheckBox按鈕順序 ChartControl.CrosshairOptions.CrosshairLabelMode = CrosshairLabelMode.ShowCommonForAllSeries;//ShowForNearestSeries(顯示最近)//ShowCommonForAllSeries(顯示全部)//ShowForEachSeries(分開顯示每個,不好用) ChartControl.CrosshairOptions.LinesMode = CrosshairLinesMode.Auto; ChartControl.CrosshairOptions.ShowArgumentLabels = false; //ChartControl.LegendItemChecked += ChartControl_LegendItemChecked; ChartControl.EndInit(); }

//該方法主要是填充資料,需要自行新增資料,方式如下

public List<SensorDataPoint> ReadDataFromFile()
{
List<SensorDataPoint> dataSource = new List<SensorDataPoint>();

FileStream fs = null;
try
{

dataSource.Add(new SensorDataPoint("Sensor1",
Convert.ToDouble(cells[sensor1]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor2",
Convert.ToDouble(cells[sensor2]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor3",
Convert.ToDouble(cells[sensor3]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor4",
Convert.ToDouble(cells[sensor4]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor5",
Convert.ToDouble(cells[sensor5]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor6",
Convert.ToDouble(cells[sensor6]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor7",
Convert.ToDouble(cells[sensor7]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor8",
Convert.ToDouble(cells[sensor8]), i, Convert.ToDateTime(cells[time])));
dataSource.Add(new SensorDataPoint("Sensor9",
Convert.ToDouble(cells[sensor9]), i, Convert.ToDateTime(cells[time])));

}
catch
{
throw new Exception("It's impossible to load ");
}
finally
{
reader?.Close();
fs?.Close();
}
return dataSource;
}

//modle
 public class SensorDataPoint
    {
        public string SensorKey { get; private set; }
        public double SensorValue { get; private set; }

        public double SensorIndex { get; private set; }
        public DateTime FullDate { get; private set; }




        internal SensorDataPoint(string sensorKey, double sensorValue, int sensorIndex, DateTime fullDate)
        {
            SensorKey = sensorKey;
            SensorValue = sensorValue;
            SensorIndex = sensorIndex;
            FullDate = fullDate;
        }


    }

關鍵的地方在於,建立的modle類對應折線圖的x,y軸,然後填充資料

 ChartControl.SeriesDataMember = "SensorKey";
            ChartControl.SeriesTemplate.SetDataMembers("SensorIndex", "SensorValue");
吾生也有涯,而知也無涯,以有涯隨無涯,殆已。