ZEDGRAPH画图心得,SQL语句构造!!!

 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         }
View Code

SQL查询语句构造好了查询的结果绘图才能一一对应,不然就乱了,年份和值对应不起来真让我蛋疼,不过重新通过构造SQL解决问题了。

1         public 洱海各月出流流量frm()
2         {
3             InitializeComponent();
4             Drawline();//画折线函数放在这个位置,解决了每次选择查询日期窗体加载时,重新绘制折线图问题
5         }
View Code

在前一篇随笔中的绘图有BUG,每次窗体重新加载,或者选择日期以后,都会重复画图,画的图不是重叠的,图标会不断地增多,蛋疼,尝试使用点击按钮控制绘图,但是感觉不太好,想了想还是让窗体初始化就绘图,这样就解决了以上重复绘图的BUG。

原文地址:https://www.cnblogs.com/yuhuameng/p/3659192.html