2012-10-19 12 views
7

私は、WindowsフォームでMSChartを使用して燭台のグラフを作成するという使命に就いています。私はすでに3D棒グラフを問題なく作成することに成功しました。しかし、インターネット上での長い検索の後に、Microsoftのソースコード(WinSamples)と頭がいっぱいの私は、燭台のグラフを作成する正しい方法を見つけることができません。燭台の複数のY値

複数のY値またはコードの修正(グラフを実行すると、凡例ラベルには何も表示されずデバッグすることはありません)をチャートに追加するという明確な例があります。

この例はOleDBに基づいています(私の値はAccessデータベースにあります)。

私の質問:Windowsフォームの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]を参照し、:ここで

は私の現在の(動作しない)コードがあります。私は少し修正したバージョン(List<>でdbデータを偽造)を問題なく実行しました。 DBからのデータがOKであることを確認する必要があります。

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

ありがとうございました! 私のデータベースはいくつかの空の値を返しました(それを修正しました)。そして、あなたは余分なヒント/訂正です。私は最終的に燭台のチャートを作成することができました。 Uは最高です! – Jens

関連する問題