Autor Beitrag
WSS-130
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Mi 03.02.16 00:29 
**************************************************************************
**************************************************************************
**************************************************************************

Edit: Titel angepasst nach Post 05.02.16 00:56 Uhr!
Direkter Link zum Post weiter unten: www.entwickler-ecke.....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:
ausblenden volle Höhe 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)
{
  //Klasse employee(string empName, DateTime tStart)                      //Eig hat jeder 2 Zeiten (Kommen, Gehen)

  DateTime minDate = new DateTime(19010101000000);
  DateTime maxDate = new DateTime(19010101235959);
  List<employee> pers = new List<employee>();

  pers.Add(new employee("max"new DateTime(19010101144500)));  //Eig hat jeder 2 Zeiten (Kommen, Gehen)
  pers.Add(new employee("carl"new DateTime(19010101164500)));
  pers.Add(new employee("mike"new DateTime(19010101184500))); 
  
  var s = new Series();
  s.ChartType = SeriesChartType.StackedBar;       //StackedBar, Da Zeit von 00:00 bis "Kommen" anschließend mit Weiß "übermalt" werden soll
  
  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


Zuletzt bearbeitet von WSS-130 am Fr 05.02.16 02:00, insgesamt 2-mal bearbeitet
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 03.02.16 10:04 
- Nachträglich durch die Entwickler-Ecke gelöscht -
WSS-130 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: 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: stackoverflow.com/qu...orms-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
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 04.02.16 09:35 
- Nachträglich durch die Entwickler-Ecke gelöscht -
WSS-130 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: 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":
ausblenden 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(20130101133000);
            DateTime f = d.AddHours(2);

            chart1.Series.Clear();
            chart1.Legends.Clear();
            
            s.Points.AddXY("max", d);
            s.Points.AddXY("carl", f);
            //s.Points.AddXY("frank", d, 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(20130101000000);
            DateTime maxDate = new DateTime(20130101235959); // or DateTime.Now;
            chart1.ChartAreas[0].AxisY.Minimum = minDate.ToOADate();
            chart1.ChartAreas[0].AxisY.Maximum = maxDate.ToOADate();
        }

Ergebnis (mit nur einem y-Wert) entsprechend dem obigen Code:
user defined image

Die Exception bekomme ich sobald ich den Code mit der auskommentierten Zeile ausführe:
user defined image


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: code.msdn.microsoft....onments-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
WSS-130 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 24



BeitragVerfasst: Di 09.02.16 00:55 
Ich möchte das Thema nochmal hochholen.

Hat jemand eine Idee, oder einen Lösungsvorschlag? Was mich wundert ist, dass das Beispiel bei MSDN (Samples Environments for Microsoft Chart Controls) exakt diese Verwendung der einer RangeBar zeigt, dies aber anscheinend nicht funktioniert.

Würde mich sehr über Unterstützung freuen!

Viele Grüße
Mark

Moderiert von user profile iconTh69: URL-Titel hinzugefügt.