![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 画折线 3 /// </summary> 4 public void Drawline() 5 { 6 7 8 OleDbConnection odcConnection = new OleDbConnection(MyConnectionString); //打开连接 C#操作Access之按列读取mdb 9 odcConnection.Open(); 10 OleDbCommand odCommandValue = odcConnection.CreateCommand();//value 11 OleDbCommand odCommandYear = odcConnection.CreateCommand();//year 12 13 //!!!!!!!关键查询语句!!!!!!!!!!! 14 odCommandYear.CommandText = "select 年 from 洱海各月出流流量 order by 年 asc"; //读取year,按照升序排序 15 odCommandValue.CommandText = "select 全年平均 from 洱海各月出流流量 order by 年 asc "; 16 //读取-全年平均-项,并起按照年升序排序,解决了画图时“年份”和“全年平均”不匹配的问题, 17 18 OleDbDataReader odrReaderValue = odCommandValue.ExecuteReader();//建立SQL查询value 19 OleDbDataReader odrReaderYear = odCommandYear.ExecuteReader();//建立SQL查询year 20 21 double[] ArrValue;//数组定义 22 ArrValue = new double[100];//初始化大小,分配内存 23 double[] ArrYear;//数组定义 24 ArrYear = new double[100]; 25 int im = 0, jm = 0; 26 while (odrReaderValue.Read()) 27 { 28 //读取列的每一个 29 ArrValue[im] = Convert.ToDouble(odrReaderValue["全年平均"]); 30 im++; 31 } 32 while (odrReaderYear.Read()) 33 { 34 35 ArrYear[jm] = Convert.ToDouble(odrReaderYear["年"]);//读取列的每一个 36 jm++; 37 } 38 39 odrReaderValue.Close(); 40 odrReaderYear.Close(); 41 odcConnection.Close(); 42 43 44 int leng = ArrValue.Length; 45 46 GraphPane MyPane = zedGraphControl1.GraphPane; 47 MyPane.Title.Text = "洱海年平均出流流量"; 48 MyPane.XAxis.Title.Text = "年份"; 49 MyPane.YAxis.Title.Text = "流量(立方米每秒)"; 50 51 PointPairList pplist = new PointPairList();//显示点数组 52 for (int i = 0; i < leng; i++) 53 { 54 55 pplist.Add(ArrYear[i], ArrValue[i]);//xaile是年,yaile是年平均流量值 56 } 57 58 //画图 59 LineItem myCurve = MyPane.AddCurve("平均流量", pplist, Color.Red, SymbolType.Diamond);//标注样式 60 61 myCurve.Symbol.Fill = new Fill(Color.White);//背景填充白色 62 MyPane.XAxis.MajorGrid.IsVisible = true;//显示X网格 63 MyPane.YAxis.MajorGrid.IsZeroLine = true;//Y坐标不显示0坐标线 64 //MyPane.YAxis.MajorGrid.IsZeroLine = false;//Y坐标不显示0坐标线 65 66 // Align the Y axis labels so they are flush to the axis 67 MyPane.YAxis.Scale.Align = AlignP.Inside; 68 69 //坐标范围划定 70 MyPane.YAxis.Scale.Min = -20; 71 MyPane.YAxis.Scale.Max = 68; 72 73 MyPane.XAxis.Scale.Min = 1950; 74 MyPane.XAxis.Scale.Max = 2025; 75 76 MyPane.Chart.Fill = new Fill(Color.White, Color.LightGray, 45.0f); 77 78 79 // Add a text box with instructions 80 TextObj text = new TextObj( 81 "左键拖拽放大 鼠标中键滚放缩 右键菜单", 82 0.05f, 0.95f, CoordType.ChartFraction, AlignH.Left, AlignV.Bottom); 83 text.FontSpec.StringAlignment = StringAlignment.Near; 84 MyPane.GraphObjList.Add(text); 85 86 zedGraphControl1.IsShowHScrollBar = true; 87 zedGraphControl1.IsShowVScrollBar = true; 88 zedGraphControl1.IsAutoScrollRange = true; 89 90 zedGraphControl1.IsShowPointValues = true; 91 zedGraphControl1.PointValueEvent += new ZedGraphControl.PointValueHandler(MyPointValueHandler); 92 zedGraphControl1.AxisChange(); 93 // Make sure the Graph gets redrawn 94 //zedGraphControl1.Invalidate(); 95 96 } 97 98 }
SQL查询语句构造好了查询的结果绘图才能一一对应,不然就乱了,年份和值对应不起来真让我蛋疼,不过重新通过构造SQL解决问题了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 public 洱海各月出流流量frm() 2 { 3 InitializeComponent(); 4 Drawline();//画折线函数放在这个位置,解决了每次选择查询日期窗体加载时,重新绘制折线图问题 5 }
在前一篇随笔中的绘图有BUG,每次窗体重新加载,或者选择日期以后,都会重复画图,画的图不是重叠的,图标会不断地增多,蛋疼,尝试使用点击按钮控制绘图,但是感觉不太好,想了想还是让窗体初始化就绘图,这样就解决了以上重复绘图的BUG。