因為自己畢業需要做一個有關環境監測的項目,原理是通過無線采集環境信息,將信息實時保存到數據庫,上位機是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濃度");
自己的第一篇博文,馬馬虎虎吧,記錄在此,多積累!加油