由於本身畢業須要作一個有關環境監測的項目,原理是經過無線採集環境信息,將信息實時保存到數據庫,上位機是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濃度");
本身的第一篇博文,馬馬虎虎吧,記錄在此,多積累!加油內存