C# Chart控件的使用总结1
(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的更多相关文章
- ASP.NET中的chart控件绑定SQL Server数据库
网上很多的chart控件的实例都没有绑定数据库,经过一番摸索后,终于实现了chart控件绑定数据库. 首先,在Visual Studio中建立一个网站,新建一个WebForm项目,名称为ChartTe ...
- C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性
http://blog.sina.com.cn/s/blog_621e24e20101cp64.html 为避免耽误不喜欢这种曲线图效果的亲们的时间,先看一下小DEMO效果图: 先简单说一下,从图中可 ...
- javascript曲线图和面积图Line & Area chart控件功能及下载
Line & Area chart 控件是一款新型的.可用性极强的曲线图和面积图产品.一个您网站的访问者可以放大他感兴趣的一段区域,打开和关闭数值气球,并可显示和隐藏图表.您能创建简单.堆积. ...
- Chart控件,把Y轴设置成百分比
这次所有属性设置都用代码(就当整理便于以后查询). 在窗体放置一个Chart控件,未做任何设置:然后编写代码: //设置 chart2.Legends[ ].Enabled = false;//不显示 ...
- winform Chart控件 获取鼠标处坐标值方法
Chart控件本身功能强大,应用广泛,因此其属性.方法也很多.此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法 1,调用Chart事件 GetToolTip 利用ToolTipEventArg ...
- C# chart控件绘制曲线
在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using Syst ...
- Chart控件的多种使用方法
花了近一周时间专门研究.net 3.5平台提供的Chart控件的使用方法,感觉该控件的功能很强大,做出的图表效果也很美观,使用方法也并不复杂.如今先讲下Chart控件的部署及一些基本使用方法. 一.安 ...
- 使用.net 的Chart控件绘制曲线图
在进行软件开发过程中我们可能会碰到需要生成图表的情况,在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你 ...
- chart控件怎么使x轴标签全部显示出来
在vs2012中使用chart控件事,x轴的标签过多,致使默认只能显示其中的一部分,如图 当然,我们可以通过设置,使得x轴标签全部显示. 首先,通过chart控件属性,找到 “ChartAreas ...
- 用Chart控件绘制动态图表
进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量.ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用.本文仅以VC++为 ...
随机推荐
- 工具:使用过的 API 文档生成工具
背景 2012 年之前几乎没有为代码增加注释,当然,代码的命名也不见得合理(好的代码胜过面面俱到的注释),后来接触过一些开源框架,优秀的框架都有一个特点:文档和示例非常多,在后来的日子里,几乎会强制自 ...
- java nio 映射文件内容到内存
FileChannel 的一个最好的功能就是能将文件的某个部分直接映射到内存.这要感谢 FileChannel.map() 方法,这个方法有下面三个参数: mode:映射到内存需要指定下面三种模式之一 ...
- 一分钟了解:String & StringBuilder & StringBuffer
这三个都是字符串对象,本篇就来分析下它们的使用途径,力求简单明了. 一.String String 长度是不可变的,如果你要改变string对象的字符或者是拼接字符的话,系统就会新建一个string, ...
- 《Software Design中文版01》
<Software Design中文版01> 基本信息 作者: (日)技术评论社 译者: 苏祎 出版社:人民邮电出版社 ISBN:9787115347053 上架时间:2014-3-18 ...
- Orchard模块开发全接触7:订单与支付之Event Bus
在这部分,我们要完成的工作有: 1:将购物车内的商品变成真正的订单: 2:理解 父子及一对多关系: 3:写一个针对 Event Bus 的扩展点: 4:实现一个针对该扩展点的模拟的 支付服务: 一:创 ...
- LaTeX使用技巧
使用LaTex的方法: (1)推荐一个手写公式.自动生成LaTex的网站——Web Equation. (2)如果会LaTex,可以直接用在线LaTex编辑 (3)从mathtype转换: 首先打开文 ...
- django时区设置以及全球用户如何各自显示当地时间
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- 遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析
开发的机器,系统情况如下: 1.server 2003 sp2 x86 2.补丁安装360 3.升级到IE8 因为担心server 2003 sp2 不能够自动update,最近都是用360打补丁,比 ...
- 如何让我domain里的机器都跟domain controller的时间保持一致?
貌似是应该先在PDC上设一个时间源服务器, 然后, 再让domain里所有的机器都去与PDC去sync时间即可. 可是笔者的环境里, 怎么都配不同, 我觉得可能是实验室的网络有什么特别的设置吧. 不管 ...
- 【Spark】Spark-foreachRDD需要注意的问题
Spark-foreachRDD需要注意的问题 dstream.foreachRDD_百度搜索 通过Spark Streaming的foreachRDD把处理后的数据写入外部存储系统中 - 吾心光明 ...