由于本身毕业须要作一个有关环境监测的项目,原理是经过无线采集环境信息,将信息实时保存到数据库,上位机是winform程序,程序须要实时的显示已经采集到的数据,并用曲线的方式表现出来,本身折腾了几天,也算是有一些小的收货,本身也是刚接触C#编程,给个人感受很是的好。数据库
用到的chart控件下载地址 连接: http://pan.baidu.com/s/1eSnYj3W 密码: xqhm 我用的是VS2010.编程
分析个人目的要求:实时刷新获取数据库的数据,将数据实时的显示到chart表上。数组
个人解决办法:一、处理数据库,搜索数据库内数据,并准备好,绑定数据库到表格,接着,定时刷新显示chart表格。从网上搜索的时候说能够经过将要显示的数据先存到数组或者araylist当中,我没这样,当新数据再出现的时候,报错说有了**数据,若是一直让往下存的话,感受会愈来愈占内存,最终会卡死吧,因此就换了思路。spa
先看一下个人chart类code
private void showChart_From_SQL(Chart myChart,string str_Sql,string AxisX,string title) { myChart.Series.Clear(); myChart.Width = 520; //图表宽度 myChart.Height = 320; //图表高度 myChart.BackColor = Color.Azure; //图表背景色 //myChart.Titles.Add("CO2浓度"); //图表标题 //新建链接 myChart.DataBindTable(SqlHelper.getread(str_Sql), AxisX); //注意数据绑定后,它的series是1而不是0 原本正常应该是1 博文后注 myChart.Series[0].ChartType = SeriesChartType.Spline; //myChart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "yyyy-MM-dd-HH:mm:ss"; myChart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Format = "MM-dd/HH:mm";//格式化时间样式 myChart.Series[0].IsValueShownAsLabel = false; //是否显示数据 myChart.Series[0].IsVisibleInLegend = false; //是否显示数听说明 myChart.Series[0].MarkerStyle = MarkerStyle.Circle; //线条上的数据点标志类型 myChart.Series[0].MarkerSize = 8; //标志大小 myChart.ChartAreas[0].AxisX.LineColor = Color.Blue; //X轴颜色 myChart.ChartAreas[0].AxisY.LineColor = Color.Blue; //Y轴颜色 myChart.ChartAreas[0].AxisX.LineWidth = 2; //X轴宽度 myChart.ChartAreas[0].AxisY.LineWidth = 2; //Y轴宽度 myChart.ChartAreas[0].AxisY.Title = title; }
在实际使用过程当中我是经过每次清除掉series,再从新加载,因此原本是myChart.Series[1].ChartType……,我这样处理后就变成了myChart.Series[0]……orm
究竟是什么问题致使的,我每次刷新表格时,我须要调用一遍showChart_From_SQL(Chart myChart,string str_Sql,string AxisX,string title),而每次调用势必会产生一个新的series(假设为CO2曲线图),当再次画CO2曲线时,那么会再次新建绑定myChart.DataBindTable(SqlHelper.getread(str_Sql), AxisX);就会报错,由于俩个series(CO2)冲突了。其实我也是模模糊糊的,反正这样就是行了。下面是我关于这个chart的调用blog
SqlStr = @"SELECT TOP 10 CO2,addTime FROM [CO2] order by addTime desc"; Time_New = Time_last; showChart_From_SQL(chart_CO2, SqlStr, "addTime","CO2浓度");
本身的第一篇博文,马马虎虎吧,记录在此,多积累!加油内存