C#实现chart控件动态曲线绘制
public partial class 界面_Xtratabcontrol版本_ : Form
{
private Queue
private Queue
private Queue
private Queue
private int stress1 = 0;//设置一个压力值全局变量
private int stress2 = 0;//设置一个压力值全局变量
private int stress3 = 0;//设置一个压力值全局变量
private int stress4 = 0;//设置一个压力值全局变量
string monthNow = "";
string monthNext = "";
string currentTime = "";
bool isRefresh = false;
public 界面_Xtratabcontrol版本_()
{
InitializeComponent();
dataGridView1.AutoGenerateColumns = false; //设置不自动显示数据库中未绑定的列
//设置隔行背景色
this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque;
this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige;
}
private void btnInit_Click(object sender, EventArgs e)
{
InitChart1();
InitChart2();
InitChart3();
InitChart4();
}
private void btnStart_Click(object sender, EventArgs e)
{
this.timer1.Start();
}
private void btnStop_Click(object sender, EventArgs e)
{
this.timer1.Stop();
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
UpdateDate(); //根据当前时间取下一个数据,同时给month赋值
dataQueue1.Enqueue(stress1); //就是这,不断往里面加数据。
dataQueue2.Enqueue(stress2);
dataQueue3.Enqueue(stress3);
dataQueue4.Enqueue(stress4);
if (isRefresh)
{
//刷新界面
isRefresh = false;
InitChart1();
InitChart2();
InitChart3();
InitChart4();
dataQueue1.Enqueue(stress1);
dataQueue2.Enqueue(stress2);
dataQueue3.Enqueue(stress3);
dataQueue4.Enqueue(stress4);
}
this.chart1.Series[0].Points.Clear();
this.chart2.Series[0].Points.Clear();
this.chart3.Series[0].Points.Clear();
this.chart4.Series[0].Points.Clear();
for (int i = 0; i < dataQueue1.Count; i++)
{
this.chart1.Series[0].Points.AddXY((i + 1), dataQueue1.ElementAt(i)); 相当于每次都是重新画一遍
}
for (int i = 0; i < dataQueue2.Count; i++)
{
this.chart2.Series[0].Points.AddXY((i + 1), dataQueue2.ElementAt(i)); 相当于每次都是重新画一遍
}
for (int i = 0; i < dataQueue3.Count; i++)
{
this.chart3.Series[0].Points.AddXY((i + 1), dataQueue3.ElementAt(i)); 相当于每次都是重新画一遍
}
for (int i = 0; i < dataQueue4.Count; i++)
{
this.chart4.Series[0].Points.AddXY((i + 1), dataQueue4.ElementAt(i)); 相当于每次都是重新画一遍
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void InitChart1()
{
try
{
//定义图表区域
this.chart1.ChartAreas.Clear();
ChartArea chartArea1 = new ChartArea("C1");
this.chart1.ChartAreas.Add(chartArea1);
//this.chart1.Dock = DockStyle.Fill;
//定义存储和显示点的容器
this.chart1.Series.Clear();
Series series1 = new Series("S1");
series1.ChartArea = "C1";
this.chart1.Series.Add(series1);
//设置图表显示样式
this.chart1.ChartAreas[0].AxisY.Minimum = 30000;
this.chart1.ChartAreas[0].AxisY.Maximum = 50000;
this.chart1.ChartAreas[0].AxisX.Minimum = 1;
this.chart1.ChartAreas[0].AxisX.Maximum = 31;
this.chart1.ChartAreas[0].AxisX.Interval = 1;
this.chart1.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
this.chart1.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
//设置标题
this.chart1.Titles.Clear();
this.chart1.Titles.Add("S01");
this.chart1.Titles[0].Text = "1号监测点";
this.chart1.Titles[0].ForeColor = Color.RoyalBlue;
this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);
//设置图表显示样式
this.chart1.Series[0].Color = Color.Red;
if (rb1.Checked)
{
//this.chart1.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart1.Titles[0].Text = string.Format("1号监测点");
this.chart1.Series[0].ChartType = SeriesChartType.Line;
}
if (rb2.Checked)
{
this.chart1.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart1.Series[0].ChartType = SeriesChartType.Spline;
}
this.chart1.Series[0].Points.Clear();
//DBEngine.ConnectDB("orcl", "dt", "6312");
dataQueue1.Clear();//清空队列中所有数据
}
catch (Exception ex)
{
}
}
private void InitChart2()
{
try
{
//定义图表区域
this.chart2.ChartAreas.Clear();
ChartArea chartArea2 = new ChartArea("C2");
this.chart2.ChartAreas.Add(chartArea2);
//this.chart1.Dock = DockStyle.Fill;
//定义存储和显示点的容器
this.chart2.Series.Clear();
Series series2 = new Series("S2");
series2.ChartArea = "C2";
this.chart2.Series.Add(series2);
//设置图表显示样式
this.chart2.ChartAreas[0].AxisY.Minimum = 30000;
this.chart2.ChartAreas[0].AxisY.Maximum = 50000;
this.chart2.ChartAreas[0].AxisX.Minimum = 1;
this.chart2.ChartAreas[0].AxisX.Maximum = 31;
this.chart2.ChartAreas[0].AxisX.Interval = 1;
this.chart2.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
this.chart2.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
//设置标题
this.chart2.Titles.Clear();
this.chart2.Titles.Add("S02");
this.chart2.Titles[0].Text = "动态折线图显示";
this.chart2.Titles[0].ForeColor = Color.RoyalBlue;
this.chart2.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); //标题字体
//设置图表显示样式
this.chart2.Series[0].Color = Color.Red;
if (rb1.Checked)
{
//this.chart2.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart2.Titles[0].Text = string.Format("2号监测点");
this.chart2.Series[0].ChartType = SeriesChartType.Line;
}
if (rb2.Checked)
{
this.chart2.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart2.Series[0].ChartType = SeriesChartType.Spline;
}
this.chart2.Series[0].Points.Clear();
//DBEngine.ConnectDB("orcl", "dt", "6312");
dataQueue2.Clear();//清空队列中所有数据
}
catch (Exception ex)
{
}
}
private void InitChart3()
{
try
{
//定义图表区域
this.chart3.ChartAreas.Clear();
ChartArea chartArea3 = new ChartArea("C3");
this.chart3.ChartAreas.Add(chartArea3);
//this.chart1.Dock = DockStyle.Fill;
//定义存储和显示点的容器
this.chart3.Series.Clear();
Series series3 = new Series("S3");
series3.ChartArea = "C3";
this.chart3.Series.Add(series3);
//设置图表显示样式
this.chart3.ChartAreas[0].AxisY.Minimum = 30000;
this.chart3.ChartAreas[0].AxisY.Maximum = 50000;
this.chart3.ChartAreas[0].AxisX.Minimum = 1;
this.chart3.ChartAreas[0].AxisX.Maximum = 31;
this.chart3.ChartAreas[0].AxisX.Interval = 1;
this.chart3.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
this.chart3.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
//设置标题
this.chart3.Titles.Clear();
this.chart3.Titles.Add("S03");
this.chart3.Titles[0].Text = "动态折线图显示";
this.chart3.Titles[0].ForeColor = Color.RoyalBlue;
this.chart3.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); //标题字体
//设置图表显示样式
this.chart3.Series[0].Color = Color.Red;
if (rb1.Checked)
{
//this.chart3.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart3.Titles[0].Text = string.Format("3号监测点");
this.chart3.Series[0].ChartType = SeriesChartType.Line;
}
if (rb2.Checked)
{
this.chart3.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart3.Series[0].ChartType = SeriesChartType.Spline;
}
this.chart3.Series[0].Points.Clear();
//DBEngine.ConnectDB("orcl", "dt", "6312");
dataQueue3.Clear();//清空队列中所有数据
}
catch (Exception ex)
{
}
}
private void InitChart4()
{
try
{
//定义图表区域
this.chart4.ChartAreas.Clear();
ChartArea chartArea4 = new ChartArea("C4");
this.chart4.ChartAreas.Add(chartArea4);
//this.chart1.Dock = DockStyle.Fill;
//定义存储和显示点的容器
this.chart4.Series.Clear();
Series series4 = new Series("S4");
series4.ChartArea = "C4";
this.chart4.Series.Add(series4);
//设置图表显示样式
this.chart4.ChartAreas[0].AxisY.Minimum = 30000;
this.chart4.ChartAreas[0].AxisY.Maximum = 50000;
this.chart4.ChartAreas[0].AxisX.Minimum = 1;
this.chart4.ChartAreas[0].AxisX.Maximum = 31;
this.chart4.ChartAreas[0].AxisX.Interval = 1;
this.chart4.ChartAreas[0].AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;
this.chart4.ChartAreas[0].AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;
//设置标题
this.chart4.Titles.Clear();
this.chart4.Titles.Add("S04");
this.chart4.Titles[0].Text = "动态折线图显示";
this.chart4.Titles[0].ForeColor = Color.RoyalBlue;
this.chart4.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F); //标题字体
//设置图表显示样式
this.chart4.Series[0].Color = Color.Red;
if (rb1.Checked)
{
//this.chart4.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart4.Titles[0].Text = string.Format("4号监测点");
this.chart4.Series[0].ChartType = SeriesChartType.Line;
}
if (rb2.Checked)
{
this.chart4.Titles[0].Text = string.Format("动态 {0} 显示", rb1.Text);
this.chart4.Series[0].ChartType = SeriesChartType.Spline;
}
this.chart4.Series[0].Points.Clear();
//DBEngine.ConnectDB("orcl", "dt", "6312");
dataQueue4.Clear();//清空队列中所有数据
}
catch (Exception ex)
{
}
}
private void UpdateDate()
{
//1 2 3 4号点同时更新
try
{
//获取当前时间的batch值,将batch+1的时间值提取显示。
string selectsql = string.Format("select * from stressinfo where operatetime=to_date('{0}','yyyy-mm-dd')", dtp1.Value.ToShortDateString());
DataTable dtDate = new DataTable();
dtDate = DBEngine.GetDataTableBySql(selectsql);
if (dtDate.Rows.Count > 0) //4条
{
string[] getmonthNow = dtp1.Value.ToShortDateString().Split('/'); //有的电脑是'-'
monthNow = getmonthNow[1];
int currentBatch = DBEngine.ObjToInt(dtDate.Rows[0]["batchnum"]);
//int currentNode = DBEngine.ObjToInt(dtDate.Rows[0]["NODE"]); //当前节点和当前批次确定唯一记录
currentBatch++;
//获取下一个显示的时间值以及应力值
string nextsql1 = string.Format("select * from stressinfo where batchnum='{0}' and node=1", currentBatch);
DataTable dtNext1 = new DataTable();
dtNext1 = DBEngine.GetDataTableBySql(nextsql1);//取得了下一个批次的所有应力监测点数据。
if (dtNext1.Rows.Count > 0)
{
stress1 = DBEngine.ObjToInt(dtNext1.Rows[0]["CURRENTSTRESS"]);
dtp1.Value = DBEngine.ObjToDateTime(dtNext1.Rows[0]["OPERATETIME"]); //日期显示(之后应该还有各点应力的提取)
currentTime = dtp1.Value.ToShortDateString();
string[] datetime = currentTime.Split('/');
monthNext = datetime[1];
if (monthNow != monthNext)
isRefresh = true;
}
else
{
timer1.Stop();//数据到头了,没有数据了,batch+1找不到了
btnStop.Focus(); //停止键焦点显示
}
///第二个点,不用更新数据
string nextsql2 = string.Format("select * from stressinfo where batchnum='{0}' and node=2", currentBatch);
DataTable dtNext2 = new DataTable();
dtNext2 = DBEngine.GetDataTableBySql(nextsql2);//取得了下一个批次的所有应力监测点数据。
if (dtNext2.Rows.Count > 0)
{
stress2 = DBEngine.ObjToInt(dtNext2.Rows[0]["CURRENTSTRESS"]);
}
else
{
timer1.Stop();//数据到头了,没有数据了,batch+1找不到了
btnStop.Focus(); //停止键焦点显示
}
///第三个点,不用更新数据
string nextsql3 = string.Format("select * from stressinfo where batchnum='{0}' and node=3", currentBatch);
DataTable dtNext3 = new DataTable();
dtNext3 = DBEngine.GetDataTableBySql(nextsql3);//取得了下一个批次的所有应力监测点数据。
if (dtNext3.Rows.Count > 0)
{
stress3 = DBEngine.ObjToInt(dtNext3.Rows[0]["CURRENTSTRESS"]);
}
else
{
timer1.Stop();//数据到头了,没有数据了,batch+1找不到了
btnStop.Focus(); //停止键焦点显示
}
///第四个点,不用更新数据
string nextsql4 = string.Format("select * from stressinfo where batchnum='{0}' and node=4", currentBatch);
DataTable dtNext4 = new DataTable();
dtNext4 = DBEngine.GetDataTableBySql(nextsql4);//取得了下一个批次的所有应力监测点数据。
if (dtNext4.Rows.Count > 0)
{
stress4 = DBEngine.ObjToInt(dtNext4.Rows[0]["CURRENTSTRESS"]);
}
else
{
timer1.Stop();//数据到头了,没有数据了,batch+1找不到了
btnStop.Focus(); //停止键焦点显示
}
}
}
catch
{
}
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播