Ich möchte aus einer Access-Datenbank Daten in einem Chart-Tool ausgeben. Die Datenabfrage funktioniert soweit, nur das ChartTool zeigt nichts an.
Folgende Funktion für den Button zum Auslesen: connStr und sql sind global definierte Variablen
[CSHARP] private void cmdDBread_Click(object sender, EventArgs e)
{
chart1.Series[0].Points.Clear();
string sql;
if (File.Exists("daten.mdb"))
{
connStr = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=daten.mdb";
sql = "SELECT * FROM daten";
OleDbConnection conn = new OleDbConnection(connStr);
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet(); //Uerklärlicher, obligatorischer
conn.Open(); //Code für SQL-Einlesung
da.Fill(ds, "query1");
conn.Close();
DataTable dt = ds.Tables["query1"];
foreach (DataRow row in dt.Rows)
{
string serName = row["Monat"].ToString();
chart1.Series.Add(serName); //jeder Monat eine Spalte
chart1.Series[serName].ChartType = SeriesChartType.Line; //Graphdiagramm
radioButton4.Checked = true;
//int YVal = Convert.ToInt32(row[1]);// Y-Wert
//int Ywert = Convert.ToInt32(YVal);
//string colName = dt.Columns[1].ColumnName; // X-Beschriftung
//chart1.Series[serName].Points.AddXY(colName, YVal);
chart1.Visible = true;
for (int colNr = 1; colNr < dt.Columns.Count; colNr++) // die Temperaturspalte durchlaufen?
{
// keine Ahnung, was hinzgefügt wird, könnte aber richtig sein.
decimal YVal = Convert.ToDecimal(row[colNr]); // Y-Wert
string colName = dt.Columns[colNr].ColumnName; // X-Beschriftung
chart1.Series[serName].Points.AddXY(colName, YVal);
}
}
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "query1";
}
else
{
MessageBox.Show("Datenbank existiert nicht.", "Fehler", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
}
}[/CSHARP]
Dies ergibt folgendes:
Warum werden die Daten nicht angezeigt? Das datagrid kann die doch anzeigen…
Die X-Achse sollte die Monate darstellen, die Y-Achse die eingetragene Temperatur.
So sieht die auszulesende Tabelle aus: