2012-10-19 114 views
7

我的任務是在窗體中使用MSChart製作燭臺圖。我已經成功製作出三維條形圖,沒有任何問題。但經過在互聯網上長時間的搜索,微軟的源代碼(WinSamples)和很多令人頭疼的事情,我找不到創建燭臺圖的正確方法。燭臺多個Y值

什麼可以幫助我一個清晰的例子,添加一個系列的圖表與多個Y值或我的代碼更正(當我運行,調試沒有顯示exept爲傳奇標籤)。

一個好處是該示例基於OleDB(我的值在Access數據庫中)。所以我的問題:如果你有在C#中創建一個燭臺圖表的經驗,你可以給我一個提示或(甚至更好)你可以提供一些C#代碼嗎?

這是我目前(不工作)代碼:

using System.Windows.Forms.DataVisualization.Charting; 
public partial class CandleStick : Form 
{ 
    public CandleStick() 
    { 
     InitializeComponent(); 
    } 

    private void CandleStick_Load(object sender, EventArgs e) 
    { 
     GrafiekLaden(); 
    } 

    public void GrafiekLaden() 
    { 

     Koers k = new Koers(); 
     // This method fills up a list, the data comes from my database 
     // it contains Date, High, Low, Open, Close 
     k.meerdereOphalen(); 

     Series price = new Series(); 
     chart1.Series.Add(price); 

     // Set series chart type 
     chart1.Series["price"].ChartType = SeriesChartType.Candlestick; 

     // Set the style of the open-close marks 
     chart1.Series["price"]["OpenCloseStyle"] = "Triangle"; 

     // Show both open and close marks 
     chart1.Series["price"]["ShowOpenClose"] = "Both"; 

     // Set point width 
     chart1.Series["price"]["PointWidth"] = "1.0"; 

     // Set colors bars 
     chart1.Series[0]["PriceUpColor"] = "Green"; 
     chart1.Series[0]["PriceDownColor"] = "Red"; 

     for (int i = 0; i < k.Lijst.Count; i++) 
     { 
      // adding date and high 
      chart1.Series["price"].Points.AddXY(DateTime.Parse(k.Lijst[i].Datum), k.Lijst[i].Hoog); 
      // adding low 
      chart1.Series["price"].Points[i].YValues[1] = k.Lijst[i].Laag; 
      //adding open 
      chart1.Series["price"].Points[i].YValues[2] = k.Lijst[i].PrijsOpen; 
      // adding close 
      chart1.Series["price"].Points[i].YValues[3] = k.Lijst[i].PrijsGesloten; 
     } 
    } 

回答

11

你的代碼添加了一個Series未命名的「價格」,則引用了兩個Series["price"]Series[0]該不會是同樣的事情,如果其他系列已經存在。我沒有任何問題地運行了一個稍微修改過的版本(僞造db數據,內容爲List<>)。 您應該驗證來自數據庫的數據是否正常。

enter image description here

public partial class Form3 : Form 
{ 
    public Form3() 
    { 
     InitializeComponent(); 
    } 

    private void CandleStick_Load(object sender, EventArgs e) 
    { 
     GrafiekLaden(); 
    } 

    public void GrafiekLaden() 
    { 
     // fake the DB data with a simple list 
     List<dbdata> k = new List<dbdata> { 
      new dbdata("1/1/2012", 10f, 8f, 9f, 9.5f), 
      new dbdata("2/1/2012", 15F, 10F, 12F, 13F), 
      new dbdata("3/1/2012", 5F, 10F, 8F, 6F), 
      new dbdata("4/1/2012", 25F, 10F, 18F, 16F) 
     }; 

     Series price = new Series("price"); // <<== make sure to name the series "price" 
     chart1.Series.Add(price); 

     // Set series chart type 
     chart1.Series["price"].ChartType = SeriesChartType.Candlestick; 

     // Set the style of the open-close marks 
     chart1.Series["price"]["OpenCloseStyle"] = "Triangle"; 

     // Show both open and close marks 
     chart1.Series["price"]["ShowOpenClose"] = "Both"; 

     // Set point width 
     chart1.Series["price"]["PointWidth"] = "1.0"; 

     // Set colors bars 
     chart1.Series["price"]["PriceUpColor"] = "Green"; // <<== use text indexer for series 
     chart1.Series["price"]["PriceDownColor"] = "Red"; // <<== use text indexer for series 

     for (int i = 0; i < k.Count; i++) 
     { 
      // adding date and high 
      chart1.Series["price"].Points.AddXY(DateTime.Parse(k[i].Datum), k[i].Hoog); 
      // adding low 
      chart1.Series["price"].Points[i].YValues[1] = k[i].Laag; 
      //adding open 
      chart1.Series["price"].Points[i].YValues[2] = k[i].PrijsOpen; 
      // adding close 
      chart1.Series["price"].Points[i].YValues[3] = k[i].PrijsGesloten; 
     } 
    } 
} 

class dbdata 
{ 
    public string Datum; 
    public float Hoog; 
    public float Laag; 
    public float PrijsOpen; 
    public float PrijsGesloten; 
    public dbdata(string d, float h, float l, float o, float c) { Datum = d; Hoog = h; Laag = l; PrijsOpen = o; PrijsGesloten = c; } 
} 
+0

太謝謝你了! 事實證明,我的數據庫返回了一些空值(固定的),並與您額外的提示/更正我終於設法創建了我的燭臺圖表。你是最棒的! – Jens