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濃度"); 

           自己的第一篇博文,馬馬虎虎吧,記錄在此,多積累!加油

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM