从MDB文件中读取数据做曲线图
public void initGDI()
{
//画图初始化
Bitmap bmap = new Bitmap(pcWendu.Width, pcWendu.Height);
Graphics gph = Graphics.FromImage(bmap);
gph.Clear(Color.White);
PointF cpt = new PointF(40,390);//中心点
PointF[] xpt = new PointF[3] { new PointF(pcWendu.Width, cpt.Y), new PointF(pcWendu.Width - 15, cpt.Y - 8), new PointF(pcWendu.Width - 15, cpt.Y + 8) };//x轴三角形
PointF[] ypt = new PointF[3] { new PointF(cpt.X, cpt.X - 25), new PointF(cpt.X - 8, cpt.X - 10), new PointF(cpt.X + 8, cpt.X - 10) };//y轴三角形
//画x轴
gph.DrawLine(Pens.Black, cpt.X, cpt.Y, pcWendu.Width - 10, cpt.Y);
gph.DrawPolygon(Pens.Black, xpt);
gph.FillPolygon(new SolidBrush(Color.Black), xpt);
gph.DrawString("时间", new Font("宋体", 10), Brushes.Black, new PointF(pcWendu.Width - 35, cpt.Y + 10));
//画y轴
gph.DrawLine(Pens.Black, cpt.X, cpt.Y, cpt.X, cpt.X - 10);
gph.DrawPolygon(Pens.Black, ypt);
gph.FillPolygon(new SolidBrush(Color.Black), ypt);
IOValue("0", cBSelect.Text, out string KuBunn);
gph.DrawString(KuBunn, new Font("宋体", 10), Brushes.Black, new PointF(0, 7));
//画x轴坐标
float[] LactionZhD = new float[24]; //00:00
float[] LactionBD = new float[24]; //30:00
for (int i = 0; i < 24; i++)
{
gph.DrawString((i + 1).ToString("00") + ":00", new Font("宋体", 8, FontStyle.Bold), Brushes.Black, new PointF(cpt.X + i * 46 + 18, cpt.Y + 20));
gph.DrawLine(Pens.Gray, cpt.X + i * 46 + 37, cpt.Y, cpt.X + i * 46 + 37, cpt.X);
LactionZhD[i] = cpt.X + i * 46 + 35;
}
for (int i = 0; i < 24; i++)
{
gph.DrawString(i.ToString("00") + ":30", new Font("宋体", 8, FontStyle.Bold), Brushes.Black, new PointF(cpt.X + i * 46 - 5, cpt.Y + 5));
gph.DrawLine(Pens.Gray, cpt.X + i * 46 + 14, cpt.Y, cpt.X + i * 46 + 14, cpt.X);
LactionBD[i] = cpt.X + i * 46 + 14;
}
int YJianju = 0;
int Y = 0;
int YShuzhi = 0;
float YKedu = 0f;
if (cBSelect.Text == "温度")
{
Y = 6; YJianju = 5; YShuzhi = 55; YKedu = 11;
}
if (cBSelect.Text == "湿度")
{
Y = 10; YJianju = 10; YShuzhi = 35; YKedu = 3.5f;
}
if (cBSelect.Text == "粉尘")
{
Y = 5; YJianju = 2500; YShuzhi = 86; YKedu = 0.0344f;
}
//画y轴刻度
for (int i = 0; i <= Y; i = i + 1)
{
gph.DrawString((YJianju * i).ToString(), new Font("宋体", 9, FontStyle.Bold), Brushes.Black, new PointF(cpt.X - 35, cpt.Y - YShuzhi * (i) - 5));
gph.DrawLine(Pens.Black, cpt.X - 3, cpt.Y - YShuzhi * i, cpt.X, cpt.Y - YShuzhi * i);
if (i != 0)
{
gph.DrawLine(Pens.Gray, cpt.X, cpt.Y - YShuzhi * i, pcWendu.Width - 28, cpt.Y - YShuzhi * i);
}
}
float[] ZhDlist;
float[] BDlist;
DataKaBu(datatime, cBSelect.Text, out ZhDlist, out BDlist);
for (int i = 0; i < 24; i++)
{
if (ZhDlist[i].ToString() != "0")
{
gph.FillEllipse(new SolidBrush(Color.Black), LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu, 3, 3); //画整点数值
gph.DrawString(ZhDlist[i].ToString("0.0"), new Font("宋体", 7), Brushes.Black, new PointF(LactionZhD[i] - 6, cpt.Y - ZhDlist[i] * YKedu + 3));
}
if (BDlist[i].ToString() != "0")
{
gph.FillEllipse(new SolidBrush(Color.Black), LactionBD[i], cpt.Y - BDlist[i] * YKedu, 3, 3);//画半点数值
gph.DrawString(BDlist[i].ToString("0.0"), new Font("宋体", 7), Brushes.Black, new PointF(LactionBD[i] - 6, cpt.Y - BDlist[i] * YKedu - 8));
}
}
Pen Ypen = new Pen(Color.Blue, 2);
for (int i = 0; i < 24; i++)
{
if (ZhDlist[i].ToString("0.0") != "0.0" & BDlist[i].ToString("0.0") != "0.0")
{
gph.DrawLine(Ypen, LactionBD[i], cpt.Y - BDlist[i] * YKedu, LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu);
}
}
for (int i = 0; i < 23; i++)
{
if (ZhDlist[i].ToString("0.0") != "0.0" && BDlist[i + 1].ToString("0.0") != "0.0")
{
gph.DrawLine(Ypen, LactionZhD[i], cpt.Y - ZhDlist[i] * YKedu, LactionBD[i + 1], cpt.Y - BDlist[i + 1] * YKedu);
}
}
//画警戒线
Pen p = new Pen(Color.Red, 4);
if (cBSelect.Text == "温度")
{
gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_wdMax) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_wdMax) * YKedu);
gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_wdMin) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_wdMin) * YKedu);
}
if (cBSelect.Text == "湿度")
{
gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_sdMax) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_sdMax) * YKedu);
gph.DrawLine(p, cpt.X, cpt.Y - float.Parse(AppPublic.P_sdMin) * YKedu, pcWendu.Width - 28, cpt.Y - float.Parse(AppPublic.P_sdMin) * YKedu);
}
pcWendu.Image = bmap; //保存输出图片
}
/// <summary>
/// 获取00:00=>30:00 30:00=>00:00 平均值
/// </summary>
/// <param name="idatatime"></param>
private void DataKaBu(string idatatime, string icmboxVelue, out float[] ZhDlist, out float[] BDlist)
{
string KuBunn = "";
IOValue("1", icmboxVelue, out KuBunn);
string pmFilename = Application.StartupPath + @"\Data\D-" + idatatime + ".MDB";
ZhDlist = new float[24]; //30:00
BDlist = new float[24]; //00:00
if (System.IO.File.Exists(pmFilename) == false)
{
MessageBox.Show(idatatime + ".MDB文件不存在,请确认是否是稼働日","" , MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
dateTimePicker.Focus();
}else
{
MDBHelp mdbHelp = new MDBHelp(pmFilename);
mdbHelp.Open();
for (int i = 0; i < 24; i++)
{
DataTable DTbDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":00:00' and '" + i + ":30:00'");
if (DTbDian.Rows[0]["Ccount"].ToString() != "0")
{
BDlist[i] = float.Parse(DTbDian.Rows[0]["Ssum"].ToString()) / float.Parse(DTbDian.Rows[0]["Ccount"].ToString());
}
else
{
BDlist[i] = float.Parse("0.0");
}
}
DataTable DTZhDian;
for (int i = 0; i < 24; i++)
{
if (i == 23)
{
DTZhDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":30:00' and '" + i + ":59:59'");
}
else
{
DTZhDian = mdbHelp.GetDataSet("select sum(数字) as Ssum ,count(数字) as Ccount from (select right(時間,8) as T1,数字 from T_Monitor where 区分 = '" + KuBunn + "') T where T.T1 between '" + i + ":30:00' and '" + (i + 1) + ":00:00'");
}
if (DTZhDian.Rows[0]["Ccount"].ToString() != "0")
{
ZhDlist[i] = float.Parse(DTZhDian.Rows[0]["Ssum"].ToString()) / float.Parse(DTZhDian.Rows[0]["Ccount"].ToString());
}
else
{
ZhDlist[i] = float.Parse("0.0");
}
}
mdbHelp.Close();
}
}