(1)来自SQL server

此时就可以用查询语句,来获取你要用到的数据

(要引用如下命名空间:

using System.Data.SqlClient;

usingSystem.Windows.Forms.DataVisualization.Charting;)

SqlConnection mycon;

SqlDataAdaptermyda;

DataSet myds;

stringcon, sql;

con ="Server=(local);Database=OutputDB;Trusted_Connection=SSPI";

sql = "select * fromMachineStsTable where " +"日期>= " +"'" + dateTimePicker1.Value.ToString("yyyyMMdd")+ "'"+"AND日期<= " +"'" +dateTimePicker2.Value.ToString("yyyyMMdd ")+"'";

mycon =newSqlConnection(con);

mycon.Open();

myda =newSqlDataAdapter(sql,con);

此时,chart1的数据源有3种绑定方式。

方式一:直接将要查询的那张表的表名绑定上去

myds=newDataSet();

myda.Fill(myds,"MachineStsTable");

mycon.Close();

chart1.DataSource= myds.Tables["MachineStsTable"];

对应的图表X轴、Y轴绑定数据如下:

图1表MachineStsTable的详情

序列1(Series[0])的绑定方式如下:

chart1.Series[0].XValueMember= "日期";

chart1.Series[0].YValueMembers= "全生产线";

chart1.Series[0].LegendToolTip ="全生产线";//鼠标放到系列上出现的文字

chart1.Series[0].LegendText ="全生产线";//系列名字

chart1.Series[0].XValueType =ChartValueType.Date;

chart1.Series[0].ChartType= SeriesChartType.Line;

剩下的其它序列绑定同上。。

由此看出,此种方式只适合要显示的序列比较少的情况。。还是建议用方式2,将表复制到DataTable的实例中。

方式二:用新定义的DataTable类型的dt来绑定

DataTable dt =newDataTable("MachineStsTable");

myda.Fill(dt);

mycon.Close();

chart1.DataSource = dt;

注:此时是因为借助myda,dt已经将整个表复制了过来,不然还要人为添加表的内容。。。

对应的图表X轴、Y轴绑定数据如下:

for(inti = 0; i < dt.Columns.Count -2; i++)

{

chart1.Series[i].XValueMember = dt.Columns[1].ColumnName;

chart1.Series[i].YValueMembers = dt.Columns[i + 2].ColumnName;

chart1.Series[i].LegendToolTip = dt.Columns[i + 2].ColumnName;//鼠标放到系列上出现的文字

chart1.Series[i].LegendText = dt.Columns[i + 2].ColumnName;//系列名字

chart1.Series[i].XValueType =ChartValueType.DateTime;

chart1.Series[i].ChartType =SeriesChartType.StackedColumn;

}

这种就非常适合Y轴种类特别多的情况。。。。一个循环,搞定所有。。。

方式三:用类似chart1.Series[0].Points.DataBindXY(iXAxis,fTargetOT);中的DataBindXY(X,Y)来绑定数据。。其中,X是一个数组,Y也是数组,在绑定之前需要对数组中的每个元素赋值,例子如下(同样是上述图1中的表格):

DataTable dt =newDataTable("MachineStsTable");

myda.Fill(dt);

mycon.Close();

//chart1.DataSource = dt;(这句话就不要了,因为下面会一一赋值)

if (dt.Rows.Count == 0)

{

return;

}

DateTime[] iXAxis =newDateTime[dt.Rows.Count];

DateTime[] dtXAxis =newDateTime[dt.Rows.Count];

float[]fDownTime =newfloat[dt.Rows.Count];//全生产线

float[]fDownTime1 =newfloat[dt.Rows.Count];//绕线机

float[]fDownTime2 =newfloat[dt.Rows.Count];

………………直至

float[]fDownTime10=newfloat[dt.Rows.Count];

for(inti = 0; i < dt.Rows.Count; i++)

{

// dtXAxis[i] =(DateTime)dt.Rows[i][1];

iXAxis[i] = (DateTime)dt.Rows[i][1];

fDownTime[i]=float.Parse(dt.Rows[i][2].ToString());

fDownTime1[i]=float.Parse(dt.Rows[i][3].ToString());

fDownTime2[i]=float.Parse(dt.Rows[i][4].ToString());

………………直至

fDownTime10[i]=float.Parse(dt.Rows[i][12].ToString());

}

chart1.Series[0].XValueType =ChartValueType.DateTime;

chart1.Series[0].Points.DataBindXY(iXAxis, fDownTime);

chart1.Series[0].LegendToolTip ="全生产线";//鼠标放到系列上出现的文字

chart1.Series[0].LegendText ="全生产线";//系列名字

chart1.Series[0].ChartType =SeriesChartType.StackedColumn;

另外的10个序列的绑定方式如上述序列1(Series[0])。。

此种方式,适合,读过来的数据需要进行处理的情况,如果不需要处理,而且列特别多,则不建议使用这种方式,用方式二比较方便。

(2)来自Web Api。。

这种要跟写Web Api的工程师对接,知道调用方式,才能按照他返回的数据格式,来绑定数据源。方式同来源于SQL Server。。。

此时也建议根据要显示的情况,建立一个DataTable,再对表的列和行进行赋值,再按(1)中的方式二来进行绑定。大致例子如下:

DateTime[] dtXAxis =newDateTime[device_faultdescs.Count];

System.Data.DataTable myTab =newSystem.Data.DataTable("His");

myTab.Columns.Add("ID",Type.GetType("System.Int32"));

myTab.Columns[0].AutoIncrement =true;

myTab.Columns[0].Unique =true;

myTab.Columns[0].AutoIncrementSeed = 1;

myTab.Columns[0].AutoIncrementStep = 1;

myTab.Columns.Add("Xvalue",Type.GetType("System.DateTime"));

myTab.Columns.Add("停机类型",Type.GetType("System.String"));

//给要添加的列,动态添加列名,以及对应列下的数据类型。。。

for (intj = 0; j < device_faultdescs[0].desc.Count; j++)

{

myTab.Columns.Add(device_faultdescs[0].desc[j].desc,Type.GetType("System.Double"));

}

for(inti = 0; i < device_faultdescs.Count; i++)

{

DataRow newRow = myTab.NewRow();

for(intj = 0; j < device_faultdescs[i].desc.Count; j++)

{

newRow[device_faultdescs[i].desc[j].desc] =Math.Round(device_faultdescs[i].desc[j].downtime,2);

newRow["ID"] = i;

newRow["Xvalue"] =DateTime.Parse(Program.mainForm.dateTimePicker1.Value.ToString("yyyy-MM-dd"));

newRow["停机类型"] = device_faultdescs[i].devicename;

//    myTab.Rows.Add(new object[] { null,scraps[i].dt, scraps[i].detail[j].count });

// myTab.Rows[i]

}

myTab.Rows.Add(newRow);

}

//动态建立序列在chart2上

chart2.DataSource = myTab;

chart2.Series.Clear();

for (inti = 0; i < myTab.Columns.Count-3; i++)

{

chart2.Series.Add(i.ToString());//添加

}

for (intj = 0; j < myTab.Columns.Count - 3; j++)

{

chart2.Series[j].XValueMember = myTab.Columns[2].ColumnName;

chart2.Series[j].YValueMembers = myTab.Columns[j + 3].ColumnName;

chart2.Series[j].LegendToolTip =myTab.Columns[j + 3].ColumnName;//鼠标放到系列上出现的文字

chart2.Series[j].LegendText = myTab.Columns[j + 3].ColumnName; //系列名字

chart2.Series[j].XValueType =ChartValueType.String;

chart2.Series[j].ChartType =SeriesChartType.StackedColumn;

}

(3)来自单独的数据

动态添加序列,

chart3.Series.Clear();

Series seriesDownTime =newSeries("DownTime");//此时就添加一个序列,chart3.Series[0]

seriesDownTime.ChartType =SeriesChartType.Column;

//比如要添加的内容放在了数组X和数组Y中,则添加第一个值可以如下添加:

seriesDownTime.Points.AddXY(X[0],Y[0]);

下一个值与之类似,直到把很少的几个点添加完成即可。。。

此种方式适合要显示在图表上的只有少量的几个点,如果数据众多,建议按集合来添加。

3、  常用的属性

chart1.Series[0].ChartType =SeriesChartType.Line;//设置曲线类型

chart1.Series[0].XValueType =ChartValueType.DateTime;//设置X轴绑定值的类型

chart1.Series[0].LegendToolTip ="Target Output";//鼠标放到系列上出现的文字

chart1.Series[0].LegendText ="Target Output";//系列名字

chart1.ChartAreas[0].AxisX.Minimum = 1;//坐标最小值,这样的话,X轴坐标是从1开始

chart1.Series[0].IsValueShownAsLabel =true;//值作为标签显示在图表中

chart1.Series[0].BorderWidth = 3;//设置线宽

chart1.ChartAreas[0].AxisX.Interval = 1;//设置X轴间距,这样的话,就间距固定为1

double max = 120, min = 0;

chart1.ChartAreas[0].AxisY.Maximum = max;//设置Y轴最大值

chart1.ChartAreas[0].AxisY.Minimum = min; //设置Y轴最小值

大致就是这些,后续有什么想起来的,再补充。。。

 //设置坐标轴标题
                chart1.ChartAreas[0].AxisX.Title = "不良类型";               
                chart1.ChartAreas[0].AxisY.Title = "复检个数";
                chart1.ChartAreas[0].AxisY2.Title = "NG复检百分比(%)";
                //设置坐标轴标题的字体
                chart1.ChartAreas[0].AxisX.TitleFont = new Font("宋体",12F);
                chart1.ChartAreas[0].AxisY.TitleFont = new Font("宋体", 12F);
                chart1.ChartAreas[0].AxisY2.TitleFont = new Font("宋体", 12F);
 
                //设置坐标轴栅格是否可见。。
                chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
                chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
                chart1.ChartAreas[0].AxisY2.MajorGrid.Enabled = false;

C# Chart控件的使用总结1的更多相关文章

  1. ASP.NET中的chart控件绑定SQL Server数据库

    网上很多的chart控件的实例都没有绑定数据库,经过一番摸索后,终于实现了chart控件绑定数据库. 首先,在Visual Studio中建立一个网站,新建一个WebForm项目,名称为ChartTe ...

  2. C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性

    http://blog.sina.com.cn/s/blog_621e24e20101cp64.html 为避免耽误不喜欢这种曲线图效果的亲们的时间,先看一下小DEMO效果图: 先简单说一下,从图中可 ...

  3. javascript曲线图和面积图Line & Area chart控件功能及下载

    Line & Area chart 控件是一款新型的.可用性极强的曲线图和面积图产品.一个您网站的访问者可以放大他感兴趣的一段区域,打开和关闭数值气球,并可显示和隐藏图表.您能创建简单.堆积. ...

  4. Chart控件,把Y轴设置成百分比

    这次所有属性设置都用代码(就当整理便于以后查询). 在窗体放置一个Chart控件,未做任何设置:然后编写代码: //设置 chart2.Legends[ ].Enabled = false;//不显示 ...

  5. winform Chart控件 获取鼠标处坐标值方法

    Chart控件本身功能强大,应用广泛,因此其属性.方法也很多.此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法 1,调用Chart事件  GetToolTip 利用ToolTipEventArg ...

  6. C# chart控件绘制曲线

    在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using Syst ...

  7. Chart控件的多种使用方法

    花了近一周时间专门研究.net 3.5平台提供的Chart控件的使用方法,感觉该控件的功能很强大,做出的图表效果也很美观,使用方法也并不复杂.如今先讲下Chart控件的部署及一些基本使用方法. 一.安 ...

  8. 使用.net 的Chart控件绘制曲线图

    在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你 ...

  9. chart控件怎么使x轴标签全部显示出来

    在vs2012中使用chart控件事,x轴的标签过多,致使默认只能显示其中的一部分,如图 当然,我们可以通过设置,使得x轴标签全部显示. 首先,通过chart控件属性,找到   “ChartAreas ...

  10. 用Chart控件绘制动态图表

    进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量.ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用.本文仅以VC++为 ...

随机推荐

  1. mysql查询字段时实现左右补零

    右补0:select RPAD(id,8,'0') as pad from tmp; 左补0:select LPAD(id,8,'0') as pad from tmp;

  2. nodejs ffi(DLL)

    npm install ffi Error: The specified module could not be found. npm rebuild var ffi = require('ffi') ...

  3. uvc Android

    1) The kernel is V4L2 enabled, e.g.,CONFIG_VIDEO_DEV=yCONFIG_VIDEO_V4L2_COMMON=yCONFIG_VIDEO_MEDIA=y ...

  4. 用纯JAVA代码来创建视图

    package com.kale.codeview; import android.os.Bundle; import android.support.v7.app.ActionBarActivity ...

  5. [Android Pro] 深入理解函数的调用过程——栈帧

    cp :http://blog.csdn.net/x_perseverance/article/details/78897637 每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧. 首先 ...

  6. Kubernetes 存储系统 Storage 介绍

    本文环境为Kubernetes V1.11,操作系统版本为 CentOs 7.3,Kubernetes集群安装可以参考 kubeadm安装kubernetes V1.11.1 集群 容器中的存储都是临 ...

  7. Docker存出载入镜像

    镜像的存出和载入 如果你的生产环境不能连通互联网,而你又希望从互联网上获取镜像.你就需要借助 docker save命令,可以将镜像导出为 tar 文件.使用 docker load 命令,可以将ta ...

  8. Java中线程池,你真的会用吗?

    在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...

  9. JAVAWEB开发之HttpServletResponse和HttpServletRequest详解(下)(各种乱码、验证码、重定向和转发)

    HttpServletRequest获取请求头信息  (1)获取客户机请求头 String getHeader(String name) Enumeration<String> getHe ...

  10. Java与C/C++的比较(转)

    原文链接:Java和c++比较 总结一下Java的小知识,只是想稍微提醒一下自己这些基础的东西,放在这里,随时可以阅览和添加一下,以免走错了方向. 1.面向对象程序设计 面向对象程序设计语言可以直观的 ...