当前位置: 代码迷 >> 报表 >> MsChart图表格控件必懂教程
  详细解决方案

MsChart图表格控件必懂教程

热度:363   发布时间:2016-05-05 08:00:18.0
MsChart图报表控件必懂教程

MsChart是微软.Net的控件来的,在VS2010中已经集成了,图标为:,该控件在工具箱的数据栏中,支持WinForm和ASP.NET开发,对数据图形报表的显示提供了强力的支持,但是网上所提供的教程少之又少,而且微软本身提供的示例都是写死的,而我们实际开发中的数据是从数据库读取出来的,这样对于学习Chart就加大了难度,对此就有了本课程,希望能帮助到想学习和正在学习中的朋友,本教程如有不当之处,还请多多指证。  

首先我们看一看MsChart能实现些什么样的效果吧:


  好的,既然MsChart能实现这么炫丽强悍的图形效果,那么我们就进入正题吧:

首先我们看看MsChart的组成:

了解了基本的组成之后,我们就来实践一下吧,所谓实践出真知偷笑,在此以ASP.NET来实现。

        我们拖选MsChart的控件到页面上时生成的原始代码如下:

	<asp:Chart ID="ChartDemo" runat="server">            <Series>                <asp:Series Name="Series1">                </asp:Series>            </Series>            <ChartAreas>                <asp:ChartArea Name="ChartArea1">                </asp:ChartArea>            </ChartAreas>        </asp:Chart>

Series:图表集合,就是最终看到的饼图、柱状图、线图、点图等构成的集合;可以将多种相互兼容的类型放在一个绘图区域内,形成复合图。

ChartAreas:绘图区域,可以增加多个绘图区域,每个绘图区域包含独立的图表组、数据源,用于多个图表类型在一个绘图区显示。


好的我们先来做一个简单图表,效果如下:

代码实现如下:

<asp:Chart ID="Chart1" runat="server">            <Series>                <asp:Series Name="Series1">                    <Points>                        <asp:DataPoint AxisLabel="Celtics" YValues="17" />                        <asp:DataPoint AxisLabel="Lakers" YValues="15" />                        <asp:DataPoint AxisLabel="Bulls" YValues="6" />                        <asp:DataPoint AxisLabel="Spurs" YValues="4" />                        <asp:DataPoint AxisLabel="76ers" YValues="3" />                        <asp:DataPoint AxisLabel="Pistons" YValues="3" />                        <asp:DataPoint AxisLabel="Warriors" YValues="3" />                    </Points>                </asp:Series>            </Series>            <ChartAreas>                <asp:ChartArea Name="ChartArea1">                </asp:ChartArea>            </ChartAreas>        </asp:Chart>

  其中Points是指在图形区的点集合,而DataPoint是指在点集合中创建数据点,AxisLabel指X轴标题,YValues是指Y轴数据的大小。

  其中产生的效果图是默认类型图,即如上所看到的条形图。如果我们想要显示其它类型的图形只需要指定:ChartType属性即可,例如想显示为饼图,代码如下:<asp:Series Name="Series1" ChartType="Pie">。


  有了以上的小基础,那么我们就来进入后台数据绑定阶段:

数据库准备:

1.前台的代码如下(和控件生成的原码没什么区别,只是改了个ID):

	<asp:Chart ID="ChartDemo" runat="server">            <Series>                <asp:Series Name="Series1">                </asp:Series>            </Series>            <Legends></Legends>            <ChartAreas>                <asp:ChartArea Name="ChartArea1">                </asp:ChartArea>            </ChartAreas>        </asp:Chart>
2.后台的加载代码:

	protected void Page_Load(object sender, EventArgs e)        {            if (!IsPostBack)            {                BindChartInfo6();//下面的方法在这里调用就行了            }        }

好的,先看看下面具体实现代码实现的效果:

具体实现代码1-3的效果如下,只是它们的绑定方式不一样:

具体实现代码4实现的效果如下:

具体实现代码5实现的效果如下:

具体实现代码6实现的效果如下:

3.具体实现代码1:

/// <summary>        /// 绑定图形方法        /// </summary>        protected void BindChartInfo1()        {            //据源中只有两列Name和Sales,因此在调用Chart1.DataBindTable方法的时候            //告诉了图表X轴的名称为Name,因此自动将Sales设置为Y轴的数据了            string sql = "select Name,Sales from reps";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            this.ChartDemo.DataBindTable(reader, "Name");        }
具体实现代码2(只需在load方法中调用就行了,下面不在赘述):
/// <summary>        /// 绑定图形方法二        /// </summary>        protected void BindChartInfo2()        {            string sql = "select Name, Sales from reps";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            //指定X,Y轴绑定的数据            ChartDemo.Series["Series1"].Points.DataBindXY(reader, "Name", reader, "Sales");        }
具体实现代码3:
	/// <summary>        /// 绑定方法三        /// </summary>        protected void BindChartInfo3()        {            string sql = "select Name, Sales from reps";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            this.ChartDemo.DataSource = reader;            // 分别设置图表的X值和Y值            //Series[]括号中可以用索引表示,与前台的Series的Name名字对应            this.ChartDemo.Series["Series1"].XValueMember = "Name";//指定X轴数据            this.ChartDemo.Series["Series1"].YValueMembers = "Sales";//指定Y轴数据            // 绑定设置的数据            this.ChartDemo.DataBind();        }
具体实现代码4:
/// <summary>        /// 绑定方法四        /// </summary>        protected void BindChartInfo4()        {            string sql = "select Id,Name, Sales from reps";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            this.ChartDemo.Series[0].MarkerStyle = MarkerStyle.Circle;//线条上的数据点标志类型            this.ChartDemo.Series[0].MarkerSize = 8;//标志大小            ChartDemo.Series["Series1"].Label = "#VAL";//#VAL是Label和Tooltip的通配符,表示取默认Y轴变量的意思            //DataBind(数据源,X轴数据,Y轴数据,“”)            ChartDemo.Series["Series1"].Points.DataBind(reader, "Name", "Sales", "");        }
具体实现代码5:
	/// <summary>        /// 绑定方法五        /// </summary>        protected void BindChartInfo5()        {            string sql = "select Id,Name, Sales from reps";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            IList<REPS> list = new List<REPS>();            REPS reps = null;            if (reader.HasRows)            {                while (reader.Read())                {                    reps = new REPS();                    reps.Id = Convert.ToInt32(reader["Id"]);                    reps.Name = Convert.ToString(reader["Name"]);                    reps.Sales = Convert.ToInt32(reader["Sales"]);                    list.Add(reps);                }            }            //数值显示百分比形式            this.ChartDemo.Series["Series1"].Label = "#PERCENT{P}";            //DataBind(数据源,X轴数据,Y轴数据,其它显示属性)            this.ChartDemo.Series["Series1"].Points.DataBind(list, "Name", "Sales", "LegendText=Name,YValues=Sales,ToolTip=Sales");            //显示图表类型:pie饼图            this.ChartDemo.Series["Series1"].ChartType = SeriesChartType.Pie;            //设置字体            this.ChartDemo.Series["Series1"].Font = new Font("Trebuchet MS", 8, FontStyle.Regular);            //显示提示,标放置到节点上自动提示功能            this.ChartDemo.Series["Series1"].ToolTip = "#LEGENDTEXT: #VAL{C} million";            //设置调色板样式            this.ChartDemo.Series[0].Palette = ChartColorPalette.Bright;            //显示3D样式            this.ChartDemo.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;        }
具体实现代码6:
	/// <summary>        /// 绑定方法六        /// </summary>        protected void BindChartInfo6()        {            string sql = "SELECT Id, Name, RegionID, Sales FROM REPS";            SqlDataReader reader = DBHelper.ExecuteReader(CommandType.Text, sql);            this.ChartDemo.Width = 600;//设置图表宽度            this.ChartDemo.Height = 400;//设置图表高度            this.ChartDemo.BackColor = Color.Azure;//图表背景色            this.ChartDemo.Titles.Add("图表测试标题");//图表标题            //this.ChartDemo.Series[0].IsValueShownAsLabel = true;//是否显示数据            //this.ChartDemo.Series[0].IsVisibleInLegend = false;//是否显示数据说明            this.ChartDemo.Series[0].MarkerStyle = MarkerStyle.Circle;//线条上的数据点标志类型            this.ChartDemo.Series[0].MarkerSize = 8;//标志大小            this.ChartDemo.ChartAreas[0].AxisX.LineColor = Color.Blue;//X轴颜色            this.ChartDemo.ChartAreas[0].AxisY.LineColor = Color.Blue;//Y轴颜色            this.ChartDemo.ChartAreas[0].AxisX.LineWidth = 2;//X轴宽度            this.ChartDemo.ChartAreas[0].AxisY.LineWidth = 2;//Y轴宽度            this.ChartDemo.ChartAreas[0].AxisY.Title = "Y轴标题";//Y轴标题            this.ChartDemo.Series[0].ChartType = SeriesChartType.RangeColumn;//设置图表的类型,线图,饼图,RangeColumn等等            //是否启用3D显示            this.ChartDemo.ChartAreas[0].Area3DStyle.Enable3D = true;            this.ChartDemo.ChartAreas[0].AxisY.Interval = 7000;//设置Y轴的轴刻度间隔大小            this.ChartDemo.Series[0].Palette = ChartColorPalette.SemiTransparent;//设置调色板样式            this.ChartDemo.Series["Series1"].Label = "#PERCENT{P}";            this.ChartDemo.Series["Series1"].ToolTip = "#LEGENDTEXT: #VAL{C} million";            //如果x 轴坐标过多,会显示不全,我们只需要设置横坐标的间隔和偏移都设为1就行了,代码解决如下:            this.ChartDemo.ChartAreas[0].AxisX.Interval = 1;            this.ChartDemo.ChartAreas[0].AxisX.IntervalOffset = 1;            this.ChartDemo.ChartAreas[0].AxisX.LabelStyle.IsStaggered = true;            //ChartDemo.Series["Series1"].Label = "#VAL";//#VAL是Label和Tooltip的通配符,表示取默认Y轴变量的意思            //DataBind(数据源,X轴数据,Y轴数据,其它显示属性)            ChartDemo.Series["Series1"].Points.DataBind(reader, "Name", "Sales", "Label=Sales,ToolTip=Sales");        }
  好的教程到此为止了,注释讲解尽在代码中,还位各位仔细阅读。


  相关解决方案