MSChart常用属性和数据源的绑定

MSChart控件的总体介绍图

二、属性

1.属性ChartAreas

这个属性表示的是图表区域,Chart控件相当于是一个图表面板,在这个面板中可以将其分成多个图标区域,在每个图表区域中只能放置一个图表。如下图所示:是将整个图标控件分成两个图标区域,在每个图标区域中分别有一张图表。

图中蓝色代表的是某一分组的序列记录,黄色代表的是另一分组的序列记录。他们可以绑定不同的数据源。

2.属性ChartSeries

ChartSeries表示的是一条分组记录数据,在一个图标区域中可以有多个图标序列,每条图标序列是以颜色进行区分,如上图,在每张图表中都只有一条图表序列,如下图,在上一个图表中有两个图表序列,分别代表的是两条不同的分组记录。

3.属性Legends

属性Legends是对图表序列的解释,每一个图表序列都会对应着一个Legend,如下图所示:

在图表右上方的图例是对图表中序列的解释,标示着三个序列分别代表的是数据。

4.怎么设置图表中X轴和Y轴的区域

X轴和Y轴是属于ChartAreas这里面的,所以我们在设置X轴和Y轴的属性的时候,需要通过ChartAreas这个属性来获得这个图标的X轴和Y轴的信息。

1)通过编程的方式设置X轴和Y轴的区域

//设置X轴的最大最小值

chart1.ChartAreas[0].AxisX.Maximum =   50;

chart1.ChartAreas[0].AxisX.Minimum =   0;

//设置Y轴的最大最小值

chart1.ChartAreas[0].AxisY.Maximum = 200;

chart1.ChartAreas[0].AxisY.Minimum =   0;

2)通过设计器的方式设置X轴和Y轴的最大最小值

首先在属性窗口中找到Chart控件的属性ChartAreasà

点击进入到ChartAreas属性对话框,找到Axes属性à

点击进入到Axes属性对话框中à

相应的在这个对话中我们还可以设置Y轴的最大最小值,同样还可以设置一些其他关于X轴和Y轴的属性,如外观样式等。

图表对X轴和Y轴设置最大最小值时显示的效果:

注:在我们不设置X轴和Y轴最大最小值的情况下,程序会自动根据数据源绑定X轴和Y轴的值。

5.如何启用图表的3D显示效果

设置3D效果也是将图表区域以3D的形式展现,所以在设置的时候我们一样是要访问的是ChartAreas属性,在ChartAreas属性里面进行进一步的设置。

1)通过编程的方式设置图表的3D显示效果

//是图表显示3D效果

chart1.ChartAreas[0].Area3DStyle.Enable3D   = true;

2)通过设计器的方式显示3D效果

同上一样,先找到ChartAreas这个属性对话框,选中相应的图标区域,将Area3DStyle下面的Enabled设置属性设置为trueà

设置3D后显示效果如下:

6.如何设置图表标题

每张图表都会有一个或多个标题,便于用户查看,我们通过Chart的ChartTitles这个属性来设置图表的标题。

1)通过编程的方式设置图表标题

//动态的给图表添加一个标题

Title title1 = chart1.Titles.Add("title1");

//设置标题名称

title1.Text = "图表标题";

//设置标题的位置

title1.Position = new ElementPosition(10,   5, 20, 10);

//设置标题的前景色

title1.ForeColor = Color.Blue;

2)通过设计器的方式设置图表标题

首先找到Chart的ChartTitles这个属性à

进入到Titles属性对话框进行设置à

添加以后可以对添加的标题进行设置à

设置标题后显示效果:

7.如何设置图表线的宽度

通过ChartSeries的BorderWidth属性可以设置图表序列的宽度,如下:

chart1.Series[0].BorderWidth = 3;

chart1.Series[1].BorderWidth = 3;

chart1.Series[2].BorderWidth = 3;

chart1.Series[3].BorderWidth   = 3;

效果:

8.如何设置X轴和Y轴的标题

在显示数据的时候,一般我们要标明X轴和Y轴的标题,表示是对数据的一个解释,如下:

chart1.ChartAreas[0].AxisX.Title = "MonthInfo";

chart1.ChartAreas[0].AxisY.Title = "SumData";

效果:

三、绑定数据源

1.通过ChartDataSource属性绑定数据

1)如果要通过该属性设置Chart的数据源,可以作为数据源的数据类型包括:

l  DataView对象

l  DataReader数据读取器(SQL、OleDB)

l  DataSet数据集

l  DataTable

l  继承自IDataSource的数据对象

l  数组

l  列表

l  所有Enumberable对象

l  SqlCommand/OleCommand(仅DataSource数据绑定)

l  SqlDataAdapter/OleDbDataAdapter(仅DataSource数据绑定)

2)通过这个属性设置的数据源,在运行前必须设置对于X轴和Y轴要显示的数据字段

如下是通过设置DataSource属性设置的数据源绑定数据:

源代码:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

//引入命名空间

using System.Data.OracleClient;

 

namespace WindowsFormsApplication1

{

      public partial   class Form2   : Form

      {

          public Form2()

          {

            InitializeComponent();

          }

 

          private void   Form2_Load(object sender, EventArgs e)

          {

            chart1.DataSource = GetDataSet("select * from Info");

            chart1.Series[0].XValueMember = "MonthInfo";

            chart1.Series[0].YValueMembers = "SumData";

            chart1.DataBind();

          }

 

          public DataSet   GetDataSet(string sql)

          {

            DataSet   ds = new DataSet();

 

              using   (OracleConnection con = new OracleConnection("data source=oraclede;user   id=syq;password=556521;"))

            {

                using   (OracleCommand cmd = con.CreateCommand())

                {

                    cmd.CommandType = CommandType.Text;

                    cmd.CommandText = sql;

 

                    try

                    {

                        OracleDataAdapter oda = new   OracleDataAdapter(cmd);

                        oda.Fill(ds);

                    }

                    catch   (Exception e)

                    {

                        MessageBox.Show(e.Message.ToString());

                    }

                }

            }

 

            return   ds;

          }

      }

}

注:在这之前并未对Chart控件进行任何的设置,只是在Load事件中绑定数据源,并绑定了在X轴上和Y轴上要显示的字段,系统会自动根据绑定数据设置X轴和Y轴值的显示情况,我们也可以通过编程的方式来进行控制。

2.通过ChartDataBindTable方法绑定数据源

方法1:public void DataBindTable(System.Collections.IEnumerable dataSource)

参数中dataSource可以是上面任何一类数据源,但是通过该方法绑定的数据源,系统会自动将字段绑定到Chart图表中,如下图所示:

//绑定数据源

chart1.DataBindTable(GetDataSet("select ID,MonthInfo,SumData from Info").Tables[0].DefaultView);

效果图:

这里是将MonthInfo作为X轴数据显示,而ID和SumData字段都作为Y轴数据进行显示了。所以我们可以再获得数据源的SQL语句中指查找两个字段,不绑定多个字段,由此看此方法只适用于绑定两个字段的数据表。修改后效果:

这时显示的数据就是X轴显示MonthInfo字段,Y轴显示SumData字段。

方法2:public void DataBindTable(System.Collections.IEnumerable dataSource, string xField)

参数:dataSource,数据源;xField,X轴要绑定的字段。

chart1.DataBindTable(GetDataSet("select MonthInfo,SumData from Info").Tables[0].DefaultView,   "MonthInfo");

效果:

这里系统会自动将MonthInfo绑定到X轴,将SumData字段绑定到Y轴。

3.通过ChartDataBindCrossTable绑定数据源

方法1:public void DataBindCrossTable(System.Collections.IEnumerable dataSource, string seriesGroupByField, string xField, string yFields, string otherFields)

dataSource:数据源

seriesGroupByField:绑定用于分组的字段

xField:绑定用于X轴的字段

yField:绑定用于Y轴的字段

otherFields:绑定用于其他属性的字段。

该方法通过设置数据源,并设置X轴和Y轴绑定的数据字段,将信息绑定到Chart中,如下:

//设定DataGridView数据源

chart1.DataBindCrossTable(GetDataSet(@"SELECT A.STUNAME,C.COUNAME,B.SCORE FROM

                                         (SELECT * FROM T_Student) A INNER JOIN

                                         (SELECT * FROM T_SCORE) B ON A.ID=B.STUID INNER JOIN

                                         (SELECT * FROM COURSE) C ON B.COUID=C.ID").Tables[0].DefaultView,

                                       "StuName", "CouName",   "Score", "ToolTip=StuName");

chart1.ChartAreas[0].Area3DStyle.Enable3D   = true;

//绑定数据源

this.dataGridView1.DataSource =   GetDataSet(@"SELECT   A.STUNAME,C.COUNAME,B.SCORE FROM

                                              (SELECT * FROM T_Student) A INNER JOIN

                                               (SELECT * FROM T_SCORE) B ON A.ID=B.STUID INNER JOIN

                                               (SELECT * FROM COURSE) C ON B.COUID=C.ID").Tables[0].DefaultView;

效果:

 

程序中是以姓名作为分组的一句,将整个数据源分成四组,构成了四个series序列,每个序列即代表了一个人的成绩信息,其中X轴表示的是科目信息,Y轴表示的是成绩信息。

注意:上面方法中otherField这个参数表示的是其他属性的值,如上面程序缩写ToolTip=Stuname,表示当鼠标移到这个图表序列上时就会显示该序列代表的是哪个用户的数据,早上面图中张良就是设置了otherField这个参数后显示的效果。

方法2:public void DataBindCrossTable(System.Collections.IEnumerable dataSource, string seriesGroupByField, string xField, string yFields, string otherFields, System.Windows.Forms.DataVisualization.Charting.PointSortOrder sortingOrder)

sortingOrder:制定用来排序的方式,PointSortOrder是一个枚举类型,有Ascending和Descending两个值。这个排序是根据组字段进行排序的。这个程序中是使用StuName这个字段进行排序的。

其余同上。

方法使用:

//设定DataGridView数据源

chart1.DataBindCrossTable(GetDataSet(@"SELECT A.STUNAME,C.COUNAME,B.SCORE FROM

                                         (SELECT * FROM T_Student) A INNER JOIN

                                         (SELECT * FROM T_SCORE) B ON A.ID=B.STUID INNER JOIN

                                       (SELECT *   FROM COURSE) C ON B.COUID=C.ID").Tables[0].DefaultView,

                                       "StuName", "CouName",   "Score", "ToolTip=StuName",   System.Windows.Forms.DataVisualization.Charting.PointSortOrder.Ascending);

chart1.ChartAreas[0].Area3DStyle.Enable3D   = true;

效果:

注:这里的排序只是针对每一个序列内部值的排序发生了变化。

4.使用Chartseries属性下面的Points.DataBind方法绑定数据源

public void DataBind(System.Collections.IEnumerable dataSource, string xField, string yFields, string otherFields)

使用这个方法,首先必须是已经确定了的数据,而且要先添加了series序列,不管是动态添加还是通过设计器添加,与上面的几个方法相比,这个方法局限性很大。编程案例:

//在使用Chart的Series属性之前,我们已经通过设计器在Chart中添加了一个ChartSeries属性

//如果没有添加ChartSeries属性,在访问时会出现索引超出范围的异常

chart1.Series[0].Points.DataBind(GetDataSet(@"SELECT A.STUNAME,C.COUNAME,B.SCORE FROM

                                                (SELECT * FROM T_Student where ID=1) A INNER JOIN

                                                (SELECT * FROM T_SCORE) B ON A.ID=B.STUID INNER JOIN

                                              (SELECT   * FROM COURSE) C ON B.COUID=C.ID").Tables[0].DefaultView,

                                                "CouName", "Score",   "Label=Score,ToolTip=StuName");

效果:

注:这里我们在绑定数据源的时候至绑定了学号为1的同学的成绩,如果我们把所有同学的成绩都绑在数据源里面的话,显示的时候就会把全部数据显示出来,而且是在同一个序列里面,这样就是失去了图表的作用,如下是同时绑定多个同学的成绩是出现的效果:

这里把所有的记录都显示出来了,我们不能分辨那个序列式代表哪个同学的,所以此种方法只适用于那些数据源已经确定了的。

5.使用ChartSeries属性下面的Points.DataBindXY方法绑定数据源

方法:public void DataBindXY(System.Collections.IEnumerable xValue, string xField, System.Collections.IEnumerable yValue, string yFields)

xValue:要绑定X轴的数据源

xField:绑定到X轴的字段

yValue:要绑定到Y轴的数据源

yFields:绑定到Y轴的字段

编程实现:

//获得数据源

DataSet ds = GetDataSet(@"SELECT A.STUNAME,C.COUNAME,B.SCORE FROM

                          (SELECT * FROM   T_Student where ID=1) A INNER JOIN

                          (SELECT * FROM   T_SCORE) B ON A.ID=B.STUID INNER JOIN

                          (SELECT * FROM   COURSE) C ON B.COUID=C.ID");

//绑定数据源

chart1.Series[0].Points.DataBindXY(ds.Tables[0].DefaultView,   "CouName",   ds.Tables[0].DefaultView, "Score");

效果:

转载于:https://www.cnblogs.com/smallrock/articles/2819190.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值