Daten aus Access-Datenbank in Chart-Tool anzeigen


#1

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:


#2

Der DB-Code funktioniert anscheinend. Ob der Charting-Code stimmt können dir nur Leute erklären die das Charting-Tool kennen. Da du uns leider nicht verrätst wie es heißt, könnte es natürlich etwas dauern bis sich ein Tool-Kundiger hier her verirrt :wink:


#3

[CSHARP] 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
chart1.Series[0].ChartType = SeriesChartType.Line;
chart1.Series[0].Points.AddXY(colName, YVal);
} [/CSHARP]

Geschafft :smiley: - nächstes Problem - Jeder spalte heißt “Monat”…