Es können beliebige csv-Dateien eingelesen werden.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; // BIBLIOTHEK using System.IO; using System.Net; //Für Webzugriff namespace _5_ReadChart //Namensraum { public partial class Form1 : Form //Vererbte Klasse Form1, abgeleitet von Form { string[] lines; string[] columns; char separator = ';'; public Form1() { InitializeComponent(); using (var client = new WebClient()) { //Download der aktuellsten Daten vom Coronavirus client.DownloadFile("https://covid.ourworldindata.org/data/ecdc/full_data.csv","fullCoronaData.csv") ; }; } private void tb_Pfad_MouseClick(object sender, MouseEventArgs e) { openFileDialog1.Filter = "csv-Files (*.csv)|*.csv|Text-Files (*.txt)|*.txt|Alles|*.*"; // Prüfen, ob das Öffnen und das Auswählen einer Datei funktioniert hat if ( openFileDialog1.ShowDialog() == DialogResult.OK) { tb_Pfad.Text = openFileDialog1.FileName; } } private void bt_readCSVData_Click(object sender, EventArgs e) { //Read all Lines //Alle Zeilen einlesen lines=File.ReadAllLines(tb_Pfad.Text); Console.WriteLine(lines[0]); Console.WriteLine(lines[2]); //columns = lines[1].Split(';'); //Überprüfung, ob Datei ausgewählt wurde und ein Pfad in TextBox //bzw. ob ein Separator angegeben wurde. if(tb_Pfad.Text.Length>0 && tb_separator.Text.Length==1) { Console.WriteLine("Textbox und Separator nicht leer."); separator = tb_separator.Text[0]; //Einzelnes Zeichen in die Variable separator speichern //Extrahieren der Spalten (=Überschriften) von der ersten Zeile columns = lines[0].Split(separator); //mehrere Spaltennamen im Array 0 ... 3 --> colums.Length ->4 //Vor dem Hinzufügen der Items in die ComboBox muss die ComboBox geleert werden cb_FilterColumn.Items.Clear(); cb_xAxis.Items.Clear(); cb_yAxis.Items.Clear(); //Befüllen der Combo-Box mit den Überschriften der Spalten for (int i=0;i<columns.Length;i++) { Console.WriteLine(columns[i]); cb_FilterColumn.Items.Add(columns[i]); cb_xAxis.Items.Add(columns[i]); cb_yAxis.Items.Add(columns[i]); } } } private void cb_location_SelectedValueChanged(object sender, EventArgs e) { } private void cb_FilterColumn_SelectedIndexChanged(object sender, EventArgs e) { Console.WriteLine("Eine Filter Column wurde ausgewählt!"); //Leeren der ComboBox vor jeder Auswahl cb_FilterText.Items.Clear(); //Sobald die Spalte ausgewählt wurde, sollen die Werte dieser Spalte in die ComboBox Filter-Text geladen werden. for(int i=1;i<lines.Length;i++) { Console.WriteLine(lines[i]); //Zeile wird gesplitted und in columns geschrieben columns = lines[i].Split(separator); //Die vom User ausgewählte Spalte wird ausgegeben Console.WriteLine(columns[cb_FilterColumn.SelectedIndex]); //Überprüfung ob der Wert bereits in der ComboBox enthalten ist if (cb_FilterText.Items.Contains(columns[cb_FilterColumn.SelectedIndex]) == false) { //Die vom User ausgewählte Spalte wird in die Combo Box Filter Text geschrieben cb_FilterText.Items.Add(columns[cb_FilterColumn.SelectedIndex]); } } } private void cb_xAxis_SelectedIndexChanged(object sender, EventArgs e) { if(cb_xAxis.SelectedIndex>=0) { int columnindex = 0; } } //Aktion, wenn eine Spalte bei Select Data xAxis ausgewählt wurde private void cb_xAxis_SelectionChangeCommitted(object sender, EventArgs e) { Console.WriteLine("Spalte für die x-Achse wurde ausgewählt"); //Bis jetzt wurden die Spalten im DataGrid händisch hinzugefügt, jetzt während der Laufzeit string coltext = cb_xAxis.SelectedItem.ToString(); string colname = cb_xAxis.SelectedItem.ToString(); // kommt aus der ComboBox Console.WriteLine(colname); //Ersetzen von Leerzeichen und Bindestrichen, da diese für den Spaltennamen nicht verwendbar sind. colname = colname.Replace(' ', '_'); //Leerzeichen mit Unterstrich ersetzt colname = colname.Replace('-', '_'); //Bindestriche mit Unterstrich ersetzt //Überprüfe, ob bereits Spalten hinzugefügt wurden: if(dataGridView1.Columns.Count ==0) { //Noch keine Spalte vorhanden //Hinzufügen der Spalte: Verlangt Namen und Headertext dataGridView1.Columns.Add(colname, coltext); } else //Falls bereits Spalten existieren, ersetze die erste Spalte mit der neuen ausgewählten Spalte { //Kein Add möglich, daher Name und Headertext ersetzen dataGridView1.Columns[0].Name = colname; dataGridView1.Columns[0].HeaderText = coltext; } //Aufruf der Funktion für das Befüllen des DataGrids und Chart FillGridAndChartWithData(); } //Aktion, wenn eine Spalte bei Select Data xAxis ausgewählt wurde private void cb_yAxis_SelectionChangeCommitted(object sender, EventArgs e) { Console.WriteLine("Spalte für die y-Achse wurde ausgewählt"); //Bis jetzt wurden die Spalten im DataGrid händisch hinzugefügt, jetzt während der Laufzeit string coltext = cb_yAxis.SelectedItem.ToString(); string colname = cb_yAxis.SelectedItem.ToString(); // kommt aus der ComboBox Console.WriteLine(colname); //Ersetzen von Leerzeichen und Bindestrichen, da diese für den Spaltennamen nicht verwendbar sind. colname = colname.Replace(' ', '_'); //Leerzeichen mit Unterstrich ersetzt colname = colname.Replace('-', '_'); //Bindestriche mit Unterstrich ersetzt //Überprüfe, ob bereits Spalten hinzugefügt wurden: if (dataGridView1.Columns.Count == 1) { //Noch keine Spalte vorhanden //Hinzufügen der Spalte: Verlangt Namen und Headertext dataGridView1.Columns.Add(colname, coltext); } else if(dataGridView1.Columns.Count >= 1) //Falls bereits Spalten existieren, ersetze die erste Spalte mit der neuen ausgewählten Spalte { //Kein Add möglich, daher Name und Headertext ersetzen dataGridView1.Columns[1].Name = colname; dataGridView1.Columns[1].HeaderText = coltext; } //Aufruf der Funktion für das Befüllen des DataGrids und Chart FillGridAndChartWithData(); } public void FillGridAndChartWithData() { //Optionale Einstellungen für das Chart chart1.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dot; 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; chart1.ChartAreas[0].AxisX.LabelStyle.Angle = -90; chart1.ChartAreas[0].AxisY.MinorGrid.LineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dot; chart1.ChartAreas[0].AxisY.MinorGrid.Enabled = true; //Falls x-Achse, y-Achse und Filter ausgewählt wurden, dann rufe die Funktion FillGridAndChartWithData() auf if (dataGridView1.Columns.Count == 2 && cb_FilterText.SelectedIndex >= 0) { Console.WriteLine("Befülle Grid"); //Grid und Chart leeren dataGridView1.Rows.Clear(); chart1.Series[0].Points.Clear(); //Name der Legende ändern chart1.Series[0].Name = cb_FilterText.Text; //Achsen beschriften chart1.ChartAreas[0].AxisX.Title = cb_xAxis.SelectedIndex.ToString(); //kann es aus Combobox herausholen chart1.ChartAreas[0].AxisY.Title = dataGridView1.Columns[1].HeaderText; //oder auch aus dem DataGrid string xwert = ""; string ywert = ""; //Zeilenweise durchgehen for(int i=1; i<lines.Length;i++) { //Console.WriteLine(lines[i]); //Extrahieren der Spalten jeder Zeile columns = lines[i].Split(separator); //Auswahl der x-Werte und y-Werte xwert = columns[cb_xAxis.SelectedIndex]; //Index der ComboBox stimmt überein mit Stelle von CSV-Datei bzw. Array columns ywert = columns[cb_yAxis.SelectedIndex]; //Überprüfen, ob der ausgewählte Filter mit dem CSV-Zeileneintrag übereinstimmt // Console.WriteLine(cb_FilterText.Text); // Console.WriteLine(columns[cb_FilterColumn.SelectedIndex]); if (cb_FilterText.Text == columns[cb_FilterColumn.SelectedIndex]) { Console.WriteLine("x-Wert: " + xwert + " y-Wert: " + ywert); dataGridView1.Rows.Add(xwert, ywert); chart1.Series[0].Points.AddXY(xwert, ywert); } } } } //Aktion, wenn ein Item aus der ComBoBox Filtertext ausgewählt wurde private void cb_FilterText_SelectionChangeCommitted(object sender, EventArgs e) { //Aufruf der Funktion für das Befüllen des DataGrids und Chart FillGridAndChartWithData(); } } }