2012-10-19 15 views
7

Jestem na misji, aby wykres świecowy za pomocą MSChart w formie okna. Już udało mi się stworzyć wykres słupkowy 3D bez żadnych problemów. Ale po długich poszukiwaniach w Internecie kod źródłowy Microsoftu (WinSamples) i wiele headscratchingów nie mogę znaleźć odpowiedniego sposobu na stworzenie wykresu świecowego.Świecznik wielokrotny Y wartości

To, co może mi pomóc, to wyraźny przykład dodania serii do wykresu z wieloma wartościami Y lub korektą mojego kodu (kiedy biegnę, debugowanie nic nie pokazuje się poza etykietą legendy).

Premia byłaby taka, że ​​przykład opiera się na OleDB (moje wartości znajdują się w bazie danych Access).

Moje pytanie: Jeśli masz doświadczenie z tworzeniem wykresu świecowego w C# w formie okna, możesz podać mi podpowiedź lub (jeszcze lepiej) czy możesz podać mi jakiś kod C#?

Oto mój aktualny (nie pracuje) Kod:

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; 
     } 
    } 

Odpowiedz

11

Kod dodaje Series nie nazwany „cena”, a następnie odniesienia zarówno Series["price"] i Series[0] który nie będzie to samo, jeśli inna seria już istnieją . Uruchomiłem nieznacznie zmodyfikowaną wersję (fałszywe dane db z List<>) bez żadnych problemów. Powinieneś sprawdzić, czy dane pochodzące z twojego DB są w porządku.

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

Dziękuję bardzo! Okazuje się, że moja baza danych zwróciła kilka pustych wartości (naprawiono to) ORAZ z tobą są dodatkowe wskazówki/korekty iw końcu udało mi się stworzyć moją wykres świecowy. Jesteś najlepsza! – Jens