====== Projekt Read CSV Advanced ====== Es können beliebige csv-Dateien eingelesen werden. {{:inf:inf8bi_201920:3:3_02:screenshot-coronachart.jpg|}} 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=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