C# chart 關於實時更新傳感器數據

     由於本身畢業須要作一個有關環境監測的項目,原理是經過無線採集環境信息,將信息實時保存到數據庫,上位機是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濃度"); 

           本身的第一篇博文,馬馬虎虎吧,記錄在此,多積累!加油內存

相關文章
相關標籤/搜索