2012-10-19 31 views
7

मैं एक विंडोज़ फॉर्म में एमएस चार्ट का उपयोग करके एक मोमबत्ती ग्राफ बनाने के लिए एक मिशन पर हूं। मैं पहले से ही बिना किसी समस्या के 3 डी बार चार्ट बनाने में सफल रहा हूं। लेकिन इंटरनेट पर एक लंबी खोज के बाद, माइक्रोसॉफ्ट के सोर्स कोड (विनसमल्स) और कई हेडक्रैचिंग मुझे कैंडलस्टिक ग्राफ बनाने का सही तरीका नहीं मिल रहा है।कैंडलस्टिक कई वाई मान

क्या मेरी मदद कर सकता है चार्ट में सेरी को कई वाई-मानों या मेरे कोड में सुधार के साथ जोड़ने का स्पष्ट उदाहरण है (जब मैं दौड़ता हूं, किंवदंती लेबल के लिए कुछ भी नहीं दिखाता है)।

एक बोनस यह होगा कि उदाहरण ओलेडीबी पर आधारित है (मेरे मान एक एक्सेस डेटाबेस में हैं)।

तो मेरा प्रश्न: यदि आपको विंडोज़ फॉर्म में सी # में कैंडलस्टिक चार्ट बनाने का अनुभव है, तो क्या आप मुझे संकेत दे सकते हैं या (यहां तक ​​कि बेहतर) क्या आप मुझे कुछ सी # कोड प्रदान कर सकते हैं?

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] जो एक ही बात नहीं हो सकता है अगर अन्य श्रृंखला पहले से ही मौजूद:

यहाँ मेरे वर्तमान (काम नहीं कर रहा) कोड है । मैं बिना किसी समस्या के थोड़ा संशोधित संस्करण चला रहा था (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