標籤:
因為自己畢業需要做一個有關環境監測的項目,原理是通過無線採集環境資訊,將資訊即時儲存到資料庫,上位機是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濃度");
自己的第一篇博文,馬馬虎虎吧,記錄在此,多積累!加油
C# chart 關於即時更新感應器資料