Dev ChartControl


1、ChartControl

繪制曲線圖,橫坐標表示距離起點距離,縱坐標表示高程,均為double類型值,定義一個數據源的類。

 /// <summary>
    /// 畫圖控件數據源
    /// </summary>
    public class ChartDatasource
    {
        /// <summary>
        /// 當前位置高度
        /// </summary>
        public double Altitude { get; set; }
 
        /// <summary>
        /// 距起點距離
        /// </summary>
        public double Length { get; set; }
 
        /// <summary>
        /// 坡度
        /// </summary>
        public double Slope { get; set; }
 
    }

 

綁定字段

            this.chartControl_Alt.Series[0].ArgumentDataMember = "Length";
            this.chartControl_Alt.Series[0].ValueDataMembers[0] = "Altitude";
 
            this.chartControl_Slope.Series[0].ArgumentDataMember = "Length";
            this.chartControl_Slope.Series[0].ValueDataMembers[0] = "Slope";

 

構造一<List>,存儲坐標點對,賦值即可,作為數據源。

              var sourcelist=new List<ChartDatasource>();
            sourcelist.Add(new ChartDatasource{Altitude=33,Length=0,Slope=4});
            sourcelist.Add(new ChartDatasource{Altitude=33,Length=0,Slope=4});
            sourcelist.Add(new ChartDatasource{Altitude=33,Length=0,Slope=4});
            sourcelist.Add(new ChartDatasource{Altitude=33,Length=0,Slope=4});
            .....................
            chartControl_Alt.DataSource = sourcelist;
            chartControl_Slope.DataSource = sourcelist;

 

顯示效果如下圖所示,一個數據類,存有三個字段,但綁定的字段不同,顯示不同的結果,作為多個圖表的數據源。

 

2、一個圖上多條曲線

數據源類

/// <summary>
    /// 畫圖控件數據源
    /// </summary>
    public class RChartDataSource
    {
        /// <summary>
        /// 點號
        /// </summary>
        public string ID
        { get; set; }
 
 
        /// <summary>
        /// 源高程值
        /// </summary>
        public double HeightY
        { get; set; }
 
        /// <summary>
        /// 對比高程值
        /// </summary>
        public double HeightD
        {
            get;
            set;
        }
    }

 

之前橫坐標為double類型,則控件自動按值大小顯示在圖表上,這里也可以用string類型為橫坐標,設為ID,依此保存為1,2,3,4....

字段綁定

            this.chartControl1.Series[0].ValueDataMembers[0] = "HeightY";
            this.chartControl1.Series[0].ArgumentDataMember = "ID";
 
            this.chartControl1.Series[1].ValueDataMembers[0] = "HeightD";
            this.chartControl1.Series[1].ArgumentDataMember = "ID";

這里,橫坐標均綁定為一個字段ID,縱坐標為各自的值。

            var sourcelist=new List<RChartDataSource>();
            sourcelist.Add(new RChartDataSource{ID=1,HeightY=35,HeightD=36});
            sourcelist.Add(new RChartDataSource{ID=2,HeightY=35,HeightD=36});
            sourcelist.Add(new RChartDataSource{ID=3,HeightY=35,HeightD=36});
            sourcelist.Add(new RChartDataSource{ID=4,HeightY=35,HeightD=36});
            sourcelist.Add(new RChartDataSource{ID=5,HeightY=35,HeightD=36});
            .....................
            chartControl1.DataSource = sourcelist;

顯示結果如下所示:

若數據源列表發生變化,則可以重新賦值

sourcelist.Add(new (new RChartDataSource{ID=,HeightY=,HeightD=});
chartcontrol.DataSource=null; 
chartcontrol.DataSource=sourcelist;

3、其他

a、我們在圖表上移動或點擊時,需要獲得當前鼠標位置所對應的橫縱坐標值,可以通過以下方式獲得

為ChartControl添加CustomDrawCrosshair事件,事件代碼如下

        double Heng = 0;
        double Zong = 0;
        private void chartControl_Alt_CustomDrawCrosshair(object sender, CustomDrawCrosshairEventArgs e)
        {
            if (chartControl_Alt.DataSource != null&&IsClick)
            {
                var element = e.CrosshairElements;
                if (element.Count() > 0)
                Heng = element.ElementAt(0).SeriesPoint.NumericalArgument;
                Zong = element.ElementAt(0).SeriesPoint.Values[0];
            }
        }

 

CrosshairElements還有很多其他屬性,可進一步研究,可打斷點查看相應屬性。這里提供一種並不完善的方式,需要進一步完善。 

 

b、設置ConstanLine線位置

 var axis = chartControl_Alt.Diagram as DevExpress.XtraCharts.XYDiagram;
 axis.AxisX.ConstantLines[0].AxisValue = Heng;
 axis.AxisX.ConstantLines[0.Visible = true
 axis.AxisX.ConstantLines[1].AxisValue = 160;
 axis.AxisX.ConstantLines[1.Visible = true;

//這里的兩條線都是垂直於x軸的線,先可以通過代碼添加,也可以提前在Run Designer里面添加好初始設置為不可見。

 

Run Designer里面有很多屬性可進行設置,對控件顯示效果和顯示功能進行設置。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM