C# C# und WPF - Toolkit Diagramm!

Nick_SMI

Ensign
Registriert
Sep. 2015
Beiträge
153
Hallo zusammen!

Ich habe ein kleines Problem und komme nicht weiter:

Der folgende Code liest aus meiner DB Daten und soll Sie als "Punkt" in einem Linien-Diagramm wiedergeben!
Er setzt momentan nur einen Punkt und das ist der letzte Eintrag in der DB...

Eigentliche Frage: Wie muss ich den Code abändern? Denke hat was mit dem [0] Wert zutun!?!

Gruß und danke im Vorraus!

Code:
        private void chartLaden()
        {
            MySqlConnection con = new MySqlConnection();
            MySqlCommand cmd = new MySqlCommand();
            MySqlDataReader reader;
            string myMonat;
            myMonat = DateTime.Today.ToString("MMMM");


            con.ConnectionString =
                "Data Source=xy.de;" +
                "Initial Catalog=db_xyc;UID=xyc;password=asdf"; //Im Programm anders!

            cmd.Connection = con;


            try
            {
                con.Open();
                cmd.CommandText = "SELECT * FROM ÜbersichtGesamt where Monat = '" + myMonat + "' ";
                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    ((LineSeries)Diagramm.Series[0]).ItemsSource = new KeyValuePair<string, double>[] { new KeyValuePair<string, double>(Convert.ToString(reader["Datum"]), Convert.ToDouble(reader["Gesamteinahmen"])) };    
                }
                reader.Close();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Fehler bei der Verbindung (Entry or connection setup by try-catch is failed)", MessageBoxButton.OK, MessageBoxImage.Stop);
            }
            con.Close();    
        }
 
Da du immer [0] beschreibst, überschreibst du den Wert der davor gesetzt wurde.

du musst vorher eine variable deklarieren und dann machst du: [i++]

Code:
                var i = 0;
                while (reader.Read())
                {
                    ((LineSeries)Diagramm.Series[i++]).ItemsSource = new KeyValuePair<string, double>[] { new KeyValuePair<string, double>(Convert.ToString(reader["Datum"]), Convert.ToDouble(reader["Gesamteinahmen"])) };    
                }
                reader.Close();
 
Bagbag schrieb:
Da du immer [0] beschreibst, überschreibst du den Wert der davor gesetzt wurde.

du musst vorher eine variable deklarieren und dann machst du: [i++]

Code:
                var i = 0;
                while (reader.Read())
                {
                    ((LineSeries)Diagramm.Series[i++]).ItemsSource = new KeyValuePair<string, double>[] { new KeyValuePair<string, double>(Convert.ToString(reader["Datum"]), Convert.ToDouble(reader["Gesamteinahmen"])) };    
                }
                reader.Close();

Danke für deine Antwort!

Leider kriege ich eine Exception, dass der Index außerhalb des Bereichs lag!? :/
 
Falsch. Nicht einfach [i++] machen. Die while-Schleife muss ja nicht im Zusammenhang stehen mit der Collection, auf die mit dem Index zugegriffen wird. Dementsprechend ist es kein Wunder, dass der Index irgendwann außerhalb des Bereichs liegt.

Den Rest kann ich aber nicht beurteilen, weil aus dem Codeschnipsel nicht hervorgeht, was dieses ((LineSeries)Diagramm.Series[0]) überhaupt genau sein soll, wie groß es ist und was es mit der while-Schleife zu tun hat usw.
Ergänzung ()

Achso, falls dieses ((LineSeries)Diagramm.Series[0]) einfach eine normale Liste ist, dann sollte man wahrscheinlich an dieser Stelle nicht mit dem Index zugreifen, sondern mit Add ein neues Element hinzufügen. Nehme ich jetzt mal an.
 
Zuletzt bearbeitet:
Hi, du setzt mit jedem gelesenen Wert eine neue Datenquelle. So sollte das eher aussehen:
Code:
// Als Beispiel auf 300 beschränkt, reader sollte die Anzahl der gelesenen Zeilen liefern können ...
//Notfalls mit cmd.CommandText = "SELECT COUNT(*) FROM ÜbersichtGesamt where Monat = '" + myMonat + "' ";
//reader.GetString(0) ...

KeyValuePair<string, double>[] kp = new KeyValuePair<string, double>[300];

int i = 0;
while (reader.Read()) {
  kp[i] = new KeyValuePair<string, double>Convert.ToString(reader["Datum"]), Convert.ToDouble(reader["Gesamteinahmen"]));
}

((LineSeries)Diagramm.Series[0]).ItemsSource = kp;
 

Ähnliche Themen

Zurück
Oben