none
Diagramme werden mir nicht angezeigt RRS feed

  • Frage

  • Hi zusammen,

    in meinem unten erstellten Code möchte ich dynamisch einen chart erstellen. Das klappt beim ersten laden auch wunderbar. Nur wenn ich ein auslöseereignis aufrufe, welcher mir mit dieser Methode den Chart aktualisieren soll, so wird er mir nicht mehr angezeigt. Im Debugger habe ich gesehen, dass die Daten, die ich brauche eigentlich in den Variablen gespeichert sind.

    Meine Vermutungen sind:

    - Mir fehlt schlicht ein Anzeigebefehl

    - Ich müsste die alte ChartArea zerstören und eine neue generieren (Sollte das nicht auch einfach funktionieren, wenn ich die Series neu erstelle?

    Wie bekomme ich meine charts angezeigt?

    private void createCharts()
            {
                cKategorieAnzahl.Titles.Clear();
                cKategorieAnzahl.Titles.Add("Neukunden nach Kategorie " + nudJahrNeukunden.Value.ToString());
                cKategorieAnzahl.Series.Clear();//Standardmäßig hinzugefügte Daten löschen
    
                var series = new Series("Daten");//Serie anlegen und Namen vergeben
                series.XValueType = ChartValueType.String;
                series.XValueMember = "MECONS";//Spalte aus der Tabelle abrufen, die die X-Werte darstellt
                series.YValueType = ChartValueType.Int32;
                series.YValueMembers = "Anzahl";//Spalte aus der Tabelle abrufen, die die Y-Werte darstellt
                series.ChartType = SeriesChartType.Pie;//Diagrammtyp
                cKategorieAnzahl.Series.Add(series);//Serie zum Chart hinzufügen
                cKategorieAnzahl.DataSource = this.dbKategorieAnzahlDataSet.PFMESCON01;
    
                cKategorieAnzahl.ChartAreas[0].Area3DStyle.Enable3D = true;
    }

    Beim ersten ausführen wird es richtig angezeigt:

    Beim zweiten Durchlauf bleibt es aber leer:

    Vielen Dank für eure Hilfe im Voraus

    Gruß

    Matze

    Mittwoch, 10. Februar 2016 10:38

Antworten

  • Hallo Matze,

    versuch mal am Ende 

    cKategorieAnzahl.DataBind()
    aufzurufen.
    • Als Antwort markiert Idhaun Mittwoch, 10. Februar 2016 11:55
    Mittwoch, 10. Februar 2016 11:36

Alle Antworten

  • Hallo Matze,

    versuch mal am Ende 

    cKategorieAnzahl.DataBind()
    aufzurufen.
    • Als Antwort markiert Idhaun Mittwoch, 10. Februar 2016 11:55
    Mittwoch, 10. Februar 2016 11:36
  • Hi David,

    vielen Dank, es hat funktioniert

    Gruß

    Matze

    Mittwoch, 10. Februar 2016 11:57
  • Hi,
    ich habe Dein Code nachgestellt und mit neuer DataSet-Instanz funktioniert er problemlos.

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    using System.Windows.Forms.DataVisualization.Charting;
    
    namespace WindowsFormsApplication1CS
    {
      public partial class Form08 : Form
      {
        public Form08()
        {
          InitializeComponent();
        }
    
        private Chart cKategorieAnzahl = new Chart() { Dock = DockStyle.Fill };
        private DataSet1 dbKategorieAnzahlDataSet;
        int? nudJahrNeukunden = 2016;
        Button btn = new Button() { Text = "neu Laden", Dock = DockStyle.Top };
    
        private void Form08_Load(object sender, EventArgs e)
        {
          this.Controls.AddRange(new Control[] { cKategorieAnzahl, btn });
          btn.Click += Btn_Click;
        }
    
        private void Btn_Click(object sender, EventArgs e)
        {
          dbKategorieAnzahlDataSet = new DataSet1();
          createCharts();
        }
    
        private void createCharts()
        {
          cKategorieAnzahl.Titles.Clear();
          cKategorieAnzahl.Titles.Add("Neukunden nach Kategorie " + nudJahrNeukunden.Value.ToString());
          cKategorieAnzahl.ChartAreas.Clear();
          cKategorieAnzahl.ChartAreas.Add(new ChartArea());
          cKategorieAnzahl.ChartAreas[0].Area3DStyle.Enable3D = true;
    
    
          cKategorieAnzahl.Series.Clear();//Standardmäßig hinzugefügte Daten löschen
    
          var series = new Series("Daten");//Serie anlegen und Namen vergeben
          series.XValueType = ChartValueType.String;
          series.XValueMember = "MECONS";//Spalte aus der Tabelle abrufen, die die X-Werte darstellt
          series.YValueType = ChartValueType.Int32;
          series.YValueMembers = "Anzahl";//Spalte aus der Tabelle abrufen, die die Y-Werte darstellt
          series.ChartType = SeriesChartType.Pie;//Diagrammtyp
          cKategorieAnzahl.Series.Add(series);//Serie zum Chart hinzufügen
          cKategorieAnzahl.DataSource = this.dbKategorieAnzahlDataSet.PFMESCON01;
    
        }
      }
    
      public class DataSet1 : DataSet
      {
        Random rnd = new Random();
    
        public DataSet1()
        {
          PFMESCON01 = new DataTable();
          PFMESCON01.Columns.Add("MECONS", typeof(string));
          PFMESCON01.Columns.Add("Anzahl", typeof(int));
          PFMESCON01.Rows.Add("Internet", rnd.Next(2,5));
          PFMESCON01.Rows.Add("Empfehlung Kunde", rnd.Next(2, 5));
          PFMESCON01.Rows.Add("Sonstiges", rnd.Next(2, 5));
        }
        public DataTable PFMESCON01 { get; set; }
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Mittwoch, 10. Februar 2016 12:00