Projekt Read Chart

Ausgehend von einer csv-Datei sollen Daten in ein DataGrid und in ein Chart übernommen werden.

Benötigte Elemente:

Spalten in DataGridView benennen…

//Bibliothek
using System.IO;   //muss man einbinden
 
   string[] lines;  //global definiert, um in jeder Methode Zugriff zu haben
 
 
   //Klick auf die TextBox
   private void tb_Pfad_MouseClick(object sender, MouseEventArgs e)
   {
       //Filtert beim Dialog nur csv-Files: Beschreibung | Filter
        openFileDialog1.Filter = "csv-Files (*.csv)|*.csv|Text-Files (*.txt)|*.txt|Alles|*.*"; 
              // Achtung! Keine Leerzeichen im Filter!
       //Prüfen, ob das Öffnen und das Auswählen einer Datei funktioniert hat
       if ( openFileDialog1.ShowDialog() == DialogResult.OK)
       {
           tb_Pfad.Text=openFileDialog1.FileName;
       }
   }
 
   //Klick auf den Button
   private void bt_readCSVData_Click(object sender, EventArgs e)
   {
      //Read all Lines ---> alle Zeilen der CSV-Datei kann eingelesen werden.
      //Man benötigt ob die Bibliothek
      //using System.IO;
 
      string[] colums;
 
      //Alle Zeilen einlesen
      lines = File.ReadAllLines(tb_Pfad.Text);   //Methode liefert alle Zeilen in einem String-Array zurück. Jeder Eintrag ist eine Zeile
 
      Console.Writeline(lines[0])     //Ausgabe der ersten Zeile
      Console.Writeline(lines[0])     //Ausgabe der zweiten Zeile
 
      //String in einzelne Spalten auftrennen
      //colums = lines[0].Split(';')    //Seperator ist Semikolon
            //liefert ein Array der 1. Zeile.
      //Console.WriteLine("Gemeinde: " + colums[4]);     // Gemeinde
 
      //Einfügen in ComboBox
      //cb_location.Items.Add(colums[4]);      //Fügt den Eintrag in der ComboBox dazu
 
 
      //Von der ersten bis zur letzten Zeile
      for(int i=i; i<lines.Length; i++)     //Schleife läuft von 1 weg, da Überschrift nicht dabei sein soll
      {
           //Zeile aufteilen in mehrere Spalten anhand des Strichpunktes
           colums = lines[i].Split(';');
           Console.WriteLine("Gemeinde: " + columns[4]);
 
           //Überprüfen, ob die Gemeinde bereits eingefügt wurde
           if(cb_location.Items.Contains(colums[4]==false)
           {
                //Füge Gemeinde nur ein, falls sie noch nicht vorhanden ist.
                tb_location.Items.Add(colums[4]);
           }           
      }
 
   private void cb_location_SelectedValueChanged(object sender, EventArgs e)
   {
      Console.WriteLine("Gemeinde wurde selektiert" + cb_location.SelectedItem.ToString());   //ohne .ToString() kommt ein Objekt zurück!
 
      //Vor dem Hinzufügen neuer Werte müssen die alten gelöscht werden.
      dataGridView1.Rows.Clear();
      chart1.Series[0].Points.Clear();
 
      //Benennen der Legende im Chart
      chart1.Series[0].Name = cb_location.SelectedItem.ToString();   
 
      //Achsen benennen
      chart1.ChartAreas[0].AxisX.Title = "Year";
      chart1.ChartAreas[0].AxisY.Title = "Population";
 
      //Vertikale Beschriftung der x-Achse  
      chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90   
 
      //jedes Jahr wird angezeigt.
      chart1.ChartAreas[0].AxisX.Interval = 1;
 
      //Statt Balken Fläche:
      chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Area;
 
      // chart1.Series[0].IsValueShownAsLabel = true;   //Werte oberhalb des 
 
 
      //Linien 
      chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dot;
 
      //Optionale Einstellungen für das Chart
      chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
      chart1.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
      chart1.ChartAreas[0].CursorX.IsUserEnabled = true;
      chart1.ChartAreas[0].CursorY.IsUserEnabled = true;
 
      chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
      chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
 
      //Datentyp der x-Achse festlegen
      chart1.Series[0].XValueType = System.Windows.Forms.DataVisualization.Charting.ChartValueType.Date;
 
 
      //Befüllen des DataGrids
      //Alle Zeilen durchsuchen, falls die Gemeinde gleich der ausgewählten Gemeinde ist,
      //das Jahr und die Anzahl der Einwohner in das DataGrid schreiben
      for (int i=1; i<lines.Length;i++)
      {
         string gemeinde = "";
         gemeinde=lines[i].Split(';')[4];  //Gemeinde aus der jeweiligen Zeile rausgeholt
 
         //Wenn das in der i.ten Zeile die ausgewählte Gemeinde ist...
         if(gemeinde == cb_location.SelectedItem.ToString())
         {
            //Extrahieren des Jahres und der Einwohnerzahl
            string jahr = lines[i].Split(';')[6];
            string einwohnerzahl = lines[i].Split(';')[5];
 
            Console.WriteLine("Einwohnerzahl: " + einwohnerzahl);
            Console.WriteLine("Jahr " + jahr);
 
 
            //Hinzufügen zum DataGrid und Chart         
            dataGridView1.Rows.Add(jahr, einwohnerzahl);
 
            //Jahr als Datum parsen
            chart1.Series[0].Points.AddXY(DateTime.Parse(jahr+"01-01"), intParse(einwohnerzahl));  
         }
      }
 
      //Sortieren der Werte im DataGrid
      dataGridView.Sort(dataGridView.Columns[0],ListSortDirection.Ascending);
      //Sortieren der Werte im Chart
      chart1.Series[0].Sort(PointSortOrder.Ascending,"X");
   }