A example of MSChart

  • 3095
  • 0

摘要:A example of MSChart

Before use MSChart, u have too download four files.

They are :

  1. Microsoft Chart Controls for Microsoft .NET Framework 3.5
  2. Microsoft Chart Controls for Microsoft .NET Framework 3.5 語言套件
  3. Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008
  4. 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