前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DevExpress绘制多重坐标图形

DevExpress绘制多重坐标图形

作者头像
别团等shy哥发育
发布2023-02-27 10:57:08
7580
发布2023-02-27 10:57:08
举报
文章被收录于专栏:全栈开发那些事

多个Y轴的分析(上边是ChartControl控件、下边是GridControl控件)

在这里插入图片描述
在这里插入图片描述
  • 数据库表结构:
  • 现在的想法是将员工编号、基本工资和所属部门编号显示在折线图中,现查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  • 窗体布局如下:
在这里插入图片描述
在这里插入图片描述

代码如下:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraCharts;
using DevExpress.Utils;
using System.Data.SqlClient;

namespace TreeList_test
{
    public partial class XtraForm2 : DevExpress.XtraEditors.XtraForm
    {
        public XtraForm2()
        {
            InitializeComponent();
        }

        private void XtraForm2_Load(object sender, EventArgs e)
        {
            
            DataTable dt = CreateData();
            this.gridControl1.DataSource = dt;
            CreateChart(dt);

        }
        //准备数据内容
        private DataTable CreateData()
        {
            #region 数据库表结构
            /*
              emp:员工表

              empno:       员工编号;  
              ename:       员工名字;  
              job:         职位; 
              mgr:          上司; 
              hiredate:    入职时间;
              sal:         基本工资;  
              comm:        补贴;      
              deptno:      所属部门编号;
            */
            #endregion
            using (SqlConnection con=new SqlConnection("Data Source =.; Initial Catalog = test_10_23; User ID = sa; Password = 123456; Connection Timeout = 10"))
            {
                string sql = "select empno,sal,deptno from emp";//查找所有员工的薪水
                SqlDataAdapter sda = new SqlDataAdapter(sql, con);
                DataSet ds = new DataSet();
                sda.Fill(ds);
                return ds.Tables[0];
            }
        }
        //创建图表图形
        private void CreateChart(DataTable dt)
        {
            #region Series
            //创建几个图形的图像
          
            Series series1 = CreateSeries("员工编号",ViewType.Line,dt,0);
            Series series2 = CreateSeries("员工薪水", ViewType.Line, dt, 1);
            Series series3 = CreateSeries("所属部门编号", ViewType.Line, dt, 2);
            #endregion
            List<Series> list = new List<Series>() {series1,series2,series3};
            chartControl1.Series.AddRange(list.ToArray());
            chartControl1.Legend.Visibility = DefaultBoolean.False;
            chartControl1.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;

            for (int i = 0; i < list.Count; i++)
            {
                //   list[i].View.Color = Color.Black;

                CreateAxisY(list[i]);
            }
        }
        //CreateSeries用于创建一个典型的图形
        //注意:Series.ArgumentScaleType=ScaleType.Qualitative这句代码必须设置,否则
        //默认会把"2005年1月"内容转换为 日期类型,显示不恰当的内容
        /// <summary>
        /// 根据需要创建一个图形展现
        /// </summary>
        /// <param name="caption">图形标题</param>
        /// <param name="viewType">图形类型</param>
        /// <param name="dt">数据DataTable</param>
        /// <param name="colIndex">图形数据的列序号</param>
        /// <returns></returns>
        private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int colIndex)
        {
            Series series = new Series(caption, viewType);
            Type typeH = dt.Columns[0].DataType;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                // var argument = Convert.ChangeType(dt.Rows[i][0], typeH);//参数名称
                //  var value = Convert.ChangeType(dt.Rows[i][colIndex], typeof(float));//参数值
                string argument = dt.Rows[i][0].ToString();//横坐标,可根据自己需求设置
                var value = Convert.ChangeType(dt.Rows[i][colIndex], typeof(double));
                series.Points.Add(new SeriesPoint(argument, value));
            }
            //必须设置ArgumentScaleType的类型,否则默认会转换为日期格式,导致不是希望的格式显示
            //也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitive
            series.ArgumentScaleType = ScaleType.Qualitative;
            series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示标注标签

            return series;
        }
        /// <summary>
        /// 创建图表的第二坐标系
        /// </summary>
        /// <param name="series">Series对象</param>
        /// <returns></returns>
        private SecondaryAxisY CreateAxisY(Series series)
        {
            SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
            ((XYDiagram)chartControl1.Diagram).SecondaryAxesY.Add(myAxis);
            ((LineSeriesView)series.View).AxisY = myAxis;
            myAxis.Title.Text = series.Name;
            myAxis.Title.Alignment = StringAlignment.Far;//顶部对齐
            myAxis.Title.Visibility = DefaultBoolean.True;
            myAxis.Title.Font = new Font("宋体", 9.0f);
            Color color = series.View.Color;//设置坐标的颜色和图标线条颜色一致

            myAxis.Title.TextColor = color;
            myAxis.Label.TextColor = color;
            myAxis.Color = color;

            return myAxis;
        }
    }
}

启动程序:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档