Entwickler-Ecke
WinForms - ChartBox: ChartType RangeBar mit DateTime Daten
WSS-130 - Mi 03.02.16 00:29
Titel: ChartBox: ChartType RangeBar mit DateTime Daten
**************************************************************************
**************************************************************************
**************************************************************************
Edit: Titel angepasst nach Post 05.02.16 00:56 Uhr!
Direkter Link zum Post weiter unten:
http://www.entwickler-ecke.de/viewtopic.php?p=698505#698505
**************************************************************************
**************************************************************************
**************************************************************************
Hallo zusammen,
ich habe leider ein Problem bei meinem neuen Projekt. Besser gesagt bei der Visualisierung des Ergebnisses.
Ziel ist von verschiedenen Personen die Anwesenheit darzustellen.
Entsprechend gibt es eine Klasse mit Personen, die aus Namen und einer Zeit besteht. (Hier fehlt noch die zweite Zeit...die kommt dann wenn das erste funktioniert)
Mein Problem ist folgendes:
Obwohl ich (soweit ich es überblicke" alle Einstellungen der ChartBox richtig vorgebe, bekomme ich vertikale Balken (ChartType = Column), anstelle von horizontalen (ChartType = (Stacked)Bar). :?: :?:
Hier mein Code der Visualisierung:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| private void button1_Click(object sender, EventArgs e) { DateTime minDate = new DateTime(1901, 01, 01, 00, 00, 00); DateTime maxDate = new DateTime(1901, 01, 01, 23, 59, 59); List<employee> pers = new List<employee>();
pers.Add(new employee("max", new DateTime(1901, 01, 01, 14, 45, 00))); pers.Add(new employee("carl", new DateTime(1901, 01, 01, 16, 45, 00))); pers.Add(new employee("mike", new DateTime(1901, 01, 01, 18, 45, 00))); var s = new Series(); s.ChartType = SeriesChartType.StackedBar; chart1.Series.Clear();
foreach (employee worker in pers) { s = chart1.Series.Add(worker.nameE); s.Points.AddXY("Pers", worker.startT);
chart1.Series[worker.nameE].YValueType = ChartValueType.DateTime; chart1.ChartAreas[0].AxisY.LabelStyle.Format = "HH:mm"; chart1.ChartAreas[0].AxisY.Interval = 1; chart1.ChartAreas[0].AxisY.IntervalType = DateTimeIntervalType.Hours; chart1.ChartAreas[0].AxisY.IntervalOffset = 0; chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate(); chart1.ChartAreas[0].AxisY.Maximum = maxDate.ToOADate(); } } |
Das Ergebnis sieht so aus:
*** Habe ich entfernt ***
Und so ungefähr stelle ich mir die erste Version vor:
*** Habe ich entfernt ***
Finales Ziel:
*** Habe ich entfernt ***
Hat mir jemand einen Tipp, oder kann mir sogar den Fehler zeigen... Ich bin am Ende mit meinem Latein :cry:
Danke euch schonmal!
Viele Grüße :wink:
Mark
Delete - Mi 03.02.16 10:04
- Nachträglich durch die Entwickler-Ecke gelöscht -
WSS-130 - Mi 03.02.16 14:11
Hallo Frühlingsrolle,
vielen Dank schonmal für deinen Hinweis.
Das eigentliche Problem bleibt aber noch...Ich verstehe nicht, warum die Achsen vertauscht sind.
Viele Grüße
Mark
Ralf Jansen - Mi 03.02.16 14:23
Ein Chartcontrol für eine Zeitleiste zu mißbrauchen klingt falsch. Wäre es nicht sinnvoller sich ein explizites TimeLine Control zu besorgen? Also nach Freeware suchen, ein Control kaufen(Devexpress, Telerik), oder es selbst zu programmieren.
WSS-130 - Do 04.02.16 00:53
Hallo Ralf: Ganz Unrecht hast du ja nicht. Ich denke den Chartontrol zu missbrauchen ist dennoch charmant, da die Toolbox in VS enthalten ist.
--> Hast du dir meinen Code mal angeschaut?
Ich habe heute nochmal versucht das Problem zu finden und bin dabei auf einen Beitrag bei stackoverflow gestoßen:
http://stackoverflow.com/questions/15907556/how-do-you-set-datetime-range-on-x-axis-for-system-windows-forms-datavisualizati
Das sieht dort sehr ähnlich aus, bis auf den Punkt, dass alle Punkte in eine Serie gepackt werden... Aber das kann doch nicht der Fehler sein?
Kann mir sonst jemand beim debugging helfen?
@Frühlingrolle: Hast du noch eine Idee?
Viele Grüße
Mark
Delete - Do 04.02.16 09:35
- Nachträglich durch die Entwickler-Ecke gelöscht -
WSS-130 - Fr 05.02.16 01:53
Hallo Frühlingsrolle,
ja, stimmt. Das mit den Achsen ist allerdings richtig so. Der Verfasser des Beitrags nutzt auch ChartType "Line"
Bei "Bars" ist die horizontale Achse die y-Achse...
Nun, ich habe beschlossen mit einer Datenserie zu arbeiten. Dem entsprechend wollte ich "kurz" die RangeBar anschauen und entsprechend die Y-Werte vorgeben...
Allerdings bekomme ich eine Exception, dass der Y-Parameter nur einen Wert akzeptiert.
Der Code entspricht nun quasi dem aus stackoverflow, angepasst an ChartType "Bar":
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| private void button1_Click(object sender, EventArgs e) { Series s = new Series(); s.ChartType = SeriesChartType.RangeBar;
DateTime d = new DateTime(2013, 01, 01, 13, 30, 00); DateTime f = d.AddHours(2);
chart1.Series.Clear(); chart1.Legends.Clear(); s.Points.AddXY("max", d); s.Points.AddXY("carl", f); chart1.Series.Add(s);
chart1.Series[0].YValueType = ChartValueType.DateTime; chart1.ChartAreas[0].AxisY.LabelStyle.Format = "HH:mm"; chart1.ChartAreas[0].AxisY.Interval = 1; chart1.ChartAreas[0].AxisY.IntervalType = DateTimeIntervalType.Hours; chart1.ChartAreas[0].AxisY.IntervalOffset = 0;
DateTime minDate = new DateTime(2013, 01, 01, 00, 00, 00); DateTime maxDate = new DateTime(2013, 01, 01, 23, 59, 59); chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate(); chart1.ChartAreas[0].AxisY.Maximum = maxDate.ToOADate(); } |
Ergebnis (mit nur einem y-Wert) entsprechend dem obigen Code:
Die Exception bekomme ich sobald ich den Code mit der auskommentierten Zeile ausführe:
Würdest du mir bitte ein Beispiel posten in dem du eine RangeBar oder RangeColumn mit DateTime als Datentyp nutzt.
Meine Recherche bei google und quer durch Foren und auch dem MSDN Example:
https://code.msdn.microsoft.com/Samples-Environments-for-b01e9c61 hat eigentlich gezeigt, dass der Code funktionieren sollte...
So langsam bin ich am verzweifeln.. :cry: :cry: :cry:
Vielen Dank schonmal den Helfern!!!
Grüße
Mark
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!