2016-11-08 5 views
-1

Ich habe eine Windows Forms-Anwendung, die ein Diagramm aus Daten anzeigt, die in einer Datenbank gespeichert sind. Ich bin in der Lage, die Daten in einem Balkendiagramm oder Tortendiagramm anzuzeigen. Die Legende im Balkendiagramm zeigt jedoch nur "Series1", den Namen der Serie. Die Legende des Tortendiagramms zeigt eine korrekte Legende mit den Seriendaten an. Ich habe MSDN durchsucht und mehrere Artikel zum Hinzufügen einer Legende gefunden, aber alle haben die gleichen Ergebnisse.Wie bekomme ich Seriendaten, die in der Balkendiagramm-Legende angezeigt werden sollen?

Hier ist mein Balkendiagramm Code:

 string[] xvals = new string[dt.Rows.Count]; 
     int[] yvals = new int[dt.Rows.Count]; 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      xvals[i] = dt.Rows[i]["XValues"].ToString(); 
      yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString()); 
     } 

     Chart barChart = new Chart(); 
     ChartArea chartArea = new ChartArea(); 
     barChart.ChartAreas.Add(chartArea); 
     barChart.Dock = DockStyle.Fill; 
     barChart.BackColor = Color.Transparent; 
     barChart.Palette = ChartColorPalette.Fire; 
     barChart.ChartAreas[0].BackColor = Color.Transparent; 
     barChart.ChartAreas[0].AxisX.MajorGrid.Enabled = false; 
     barChart.ChartAreas[0].AxisY.MajorGrid.Enabled = false; 

     Series series1 = new Series 
     { Name = "Series1", IsVisibleInLegend = true, ChartType = SeriesChartType.Bar }; 
     series1.ChartType = SeriesChartType.Column; 

     barChart.Series.Add(series1); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      series1.Points.AddXY(dt.Rows[i]["XValues"].ToString(), 
       Convert.ToInt32(dt.Rows[i]["YValues"].ToString())); 
      var p1 = series1.Points[i]; 
      p1.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160); 
     } 

     barChart.Legends.Add(new Legend("Legend1")); 
     barChart.Legends["Legend1"].BackColor = Color.Transparent; 
     barChart.Series["Series1"].Legend = "Legend1"; 
     series1.IsVisibleInLegend = true; 

     gbo1.Controls.Add(barChart); 

ist hier mein Kreisdiagramm Code:

  string[] xvals = new string[dt.Rows.Count]; 
     int[] yvals = new int[dt.Rows.Count]; 

     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      xvals[i] = dt.Rows[i]["XValues"].ToString(); 
      yvals[i] = Convert.ToInt32(dt.Rows[i]["YValues"].ToString()); 
     } 

     Chart pieChart = new Chart(); 
     ChartArea chartArea = new ChartArea(); 
     chartArea.Name = "PieChartArea"; 
     pieChart.ChartAreas.Add(chartArea); 
     pieChart.Dock = DockStyle.Fill; 
     pieChart.Location = new Point(0, 50); 

     pieChart.Palette = ChartColorPalette.Fire; 
     pieChart.BackColor = Color.Transparent; 
     pieChart.ChartAreas[0].BackColor = Color.Transparent; 

     Series series2 = new Series 
     { Name = "Series2", IsVisibleInLegend = true, ChartType = SeriesChartType.Pie }; 

     pieChart.Series.Add(series2); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      series2.Points.Add((int)dt.Rows[i]["YValues"]); 
      var p2 = series2.Points[i]; 
      p2.Color = Color.FromArgb((byte)r.Next(90, 255), (byte)r.Next(90, 255), 160); 
      p2.LegendText = dt.Rows[i]["XValues"].ToString(); 
     } 

     pieChart.Legends.Add(new Legend("Legend2")); 
     pieChart.Legends["Legend2"].BackColor = Color.Transparent; 
     pieChart.Series["Series2"].Legend = "Legend2"; 
     series2.IsVisibleInLegend = true; 

     gboReport1.Controls.Add(pieChart); 

Was bin ich? Bitte helfen Sie. Hier

ist der Ausgang des Balkendiagramm: Bar Chart with bad Legend

Hier ist die Ausgabe des Tortendiagramms: Pie Chart with good Legend

+0

Welches Diagramm verwenden Sie? –

+0

Ist das was du meinst: mit System.Windows.Forms.DataVisualization.Charting; –

Antwort

0

Das ist, wie Bar und Pie Diagramme sind entworfen zu arbeiten.

Alle ChartTypesaußerPie Diagramme zeigen die Series.Names oder die SeriesTexts in ihrer Legend.

Nur Pie Charts, die nur einSeries ohnehin die DataPoint.YValues[0] wird angezeigt haben.

Wenn Sie wirklich in Datenpunkt Daten anzeigen möchten Legend Sie das tun können, aber natürlich wird es voll aussehen, wenn Sie mehr als ein paar Datenpunkte hinzufügen ..

Dies ist ein Beispiel dafür, wie Sie fügen Sie den regulären Legend verstecken und hinzufügen, die eine neue Datenwerte zeigt:

chart1.ApplyPaletteColors(); 
chart1.Legends[0].Enabled = false; 

Legend L2 = new Legend(); 
chart1.Legends.Add(L2); 
L2.Docking = Docking.Right; 
foreach (DataPoint dp in yourSeries.Points) 
{ 
    LegendItem LI = new LegendItem(dp.YValues[0].ToString("0.##"), dp.Color, ""); 
    LI.BorderWidth = 0; 
    L2.CustomItems.Add(LI); 
} 

enter image description here

Wenn Sie möchten Sie auch diese Elemente die regelmäßigehinzufügen; erstellen Sie einfach einen Verweis auf sie und verwenden Sie den Code oben:

Legend L1 = chart1.Legends[0]; 

Beachten Sie, dass die ursprünglichen Elemente aus dem ursprünglichen Legend nicht löschen können, aber!

Verwandte Themen