zoukankan      html  css  js  c++  java
  • C# chart 关于实时更新传感器数据

         因为自己毕业需要做一个有关环境监测的项目,原理是通过无线采集环境信息,将信息实时保存到数据库,上位机是winform程序,程序需要实时的显示已经采集到的数据,并用曲线的方式表现出来,自己折腾了几天,也算是有一些小的收货,自己也是刚接触C#编程,给我的感觉非常的好。

    用到的chart控件下载地址  链接: http://pan.baidu.com/s/1eSnYj3W 密码: xqhm 我用的是VS2010.

      分析我的目的要求:实时刷新获取数据库的数据,将数据实时的显示到chart表上。

      我的解决办法:1、处理数据库,搜索数据库内数据,并准备好,绑定数据库到表格,接着,定时刷新显示chart表格。从网上搜索的时候说可以通过将要显示的数据先存到数组或者araylist当中,我没这样,当新数据再出现的时候,报错说有了**数据,如果一直让往下存的话,感觉会越来越占内存,最终会卡死吧,所以就换了思路。

      先看一下我的chart类

            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]……

         到底是什么问题导致的,我每次刷新表格时,我需要调用一遍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的调用

                 SqlStr = @"SELECT TOP 10 CO2,addTime  FROM [CO2] order by addTime desc";
                 Time_New = Time_last;
                 showChart_From_SQL(chart_CO2, SqlStr, "addTime","CO2浓度"); 

               自己的第一篇博文,马马虎虎吧,记录在此,多积累!加油

      

  • 相关阅读:
    Asp.net Json 解析 与 直接用ip访问返回josn
    mysql 时间函数
    Android之TelephonyManager类的使用案例
    android:screenOrientation的说明 固定屏幕显示方向
    在android.app.Application中定义全局变量
    Android开发实例详解之IMF(Android SDK Sample—SoftKeyboard)
    Android InputMethodManager输入法简介
    android ImageView的属性android:scaleType,即ImageView.setScaleType(ImageView.ScaleType)
    VS编译常见错误枚举01
    Visual C++ Samples-------------Code Project
  • 原文地址:https://www.cnblogs.com/xc2444/p/5463354.html
Copyright © 2011-2022 走看看