摘要:A example of MSChart
Before use MSChart, u have too download four files.
They are :
- Microsoft Chart Controls for Microsoft .NET Framework 3.5
- Microsoft Chart Controls for Microsoft .NET Framework 3.5 語言套件
- Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008
- Microsoft Chart Controls for .NET Framework Documentation
A example code:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using System.Threading;
namespace TestRunChat
{
public partial class Form1 : Form
{
DataTable dt = new DataTable();
ChartArea ca = new ChartArea("ChartArea");
Legend lgName = new Legend("Legend");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ca.Area3DStyle.Enable3D = true;//開啟3D
chart1.ChartAreas.Add(ca);
lgName.IsTextAutoFit = true;
lgName.Docking = Docking.Bottom;
chart1.Legends.Add(lgName); //將Legend加入圖中
//設定數線數量
//在此就會決定數線名稱,之後如果有某值要顯示在某數線上,名稱要與此處相同
for (int i =0 ; i < 3; i++)
{
dt.Columns.Add("LineName"+i);
}
for (int i = 0; i < 30; i++)
{
DataRow dr = dt.NewRow();
for (int num = 0; num < 3; num++)
dr["LineName"+num] = 0;
dt.Rows.Add(dr);
}
//設定圖例
for (int i = 0; i < 3; i++) {
chart1.Dock = DockStyle.Fill;
Series seItem = new Series("SerialName"+i);
seItem.ChartArea = "ChartArea"; //圖例屬於哪個ChartArea
seItem.ChartType =
System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
//要以怎麼樣的統計圖表顯示,
seItem.IsVisibleInLegend = true;
seItem.Legend = "Legend"; //圖例來源名稱
seItem.LegendText = "LineName"+i;//圖例名稱
seItem.YValueMembers = "LineName"+i; //要加入的數線,跟在設定時的名稱要相同
chart1.Series.Add(seItem);
}
chart1.DataSource = dt;
chart1.DataBind();
this.Controls.Add(chart1);
this.backgroundWorker1.RunWorkerAsync();
}
private void ShowValue() {
try
{
Random r = new Random();
if (dt.Rows.Count > 30)//這動作只是保留顯示30筆即可,不用一直再增加下去
{
dt.Rows.RemoveAt(0);
}
DataRow dr = dt.NewRow();
//因為DataSource在Form Load就設了,
//所以這裡只要重新DataBind()就可以更新顯示資料,沒重DataBind之前,新資料不會顯示上去
//把取得的NextValue放到DataTable內,重新Chart.DataBind()就可以顯示出來
dt.Rows.Add(dr);
//dr["LineName" + i] = r.Next(100);
for (int i = 0; i < 3; i++)
dr["LineName" + i] = r.Next(100);
chart1.DataBind();
}
catch (Exception ex) { }
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true) {
Thread.Sleep(500); //要讓THREAD喘息一下才會把值於螢幕上顯示
this.backgroundWorker1.ReportProgress(0, e);
}
}
private void backgroundWorker1_ProgressChanged(
object sender, ProgressChangedEventArgs e)
{
ShowValue();
}
}
}
Thanks Jeff Yen. In his blog have a example too.
My example is from his.
Jeff Yen's Blog:
http://www.dotblogs.com.tw/jeff-yeh/archive/2009/09/24/10760.aspx