Benutzer mit den meisten Antworten
Problem mit ChartValueType

Frage
-
Hallo
Ich stelle Werte aus einem DataSet in einem Chart dar. Dabei sind die Werte entweder Zahlen (Double) oder vom Typ DateTime. Die Darstellung funktioniert in beiden Fällen. Sobald aber einmal die x-Achse mit Datumswerten belegt wurde, funktioniert nachher die Achsendarstellung mit Zahlen nicht mehr. Die x-Achse ist dann garnicht mehr mit Zahlen beschriftet.
Mit den ChartValueTypes wollte ich das wie folgt anpassen:
If ds.Tables(0).Columns(xWertName).DataType = System.Type.GetType("System.DateTime") And Not IsNothing(xWerteDatum) And Not IsNothing(yWerte) Then
Chart1.Series("DataSeries").Points.DataBindXY(xWerteDatum, yWerte)
Chart1.Series("DataSeries").XValueType = ChartValueType.Date
ElseIf Not IsNothing(xWerte) And Not IsNothing(yWerte) Then
Chart1.Series("DataSeries").Points.DataBindXY(xWerte, yWerte)
Chart1.Series("DataSeries").XValueType = ChartValueType.Double
End IfDas Problem besteht aber weiterhin. Auch wenn ich alle Series lösche und neu hinzufüge mit den neuen Daten.
Wie muss ich die Achseneinstellungen anpassen, damit auch nach Datumswerten auf der x-Achse die Darstellung von Zahlenwerten funktioniert?
Gruss
Martin
Antworten
-
Hi,
nach dem Zuweisen der neuen Werte an die Series.Points, führe
Chart1.ResetAutoValues()
aus, dann sollte es gehen.
Also etwa (bezogen auf obiges Example)
Chart1.Series(0).Points.DataBind(f.DefaultView, "xWerte", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.Int32 Chart1.ResetAutoValues()
Viele Grüße,
Thorsten
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 17. Juli 2011 20:25
-
Hi,
wird denn überhaup etwas angezeigt dann?
Du könntest mal das standard-databinding verwenden:
Public Class Form1 Dim f As DataTable = New DataTable() Dim fz As DataTable = New DataTable() Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load f.Columns.Add(New DataColumn("xWerte", GetType(Int32))) f.Columns.Add(New DataColumn("yWerte", GetType(Int32))) fz.Columns.Add(New DataColumn("xWerteDatum", GetType(DateTime))) fz.Columns.Add(New DataColumn("yWerte", GetType(Int32))) For i As Integer = 0 To 4 Dim dr As DataRow = f.NewRow() dr(0) = i dr(1) = i * 3 f.Rows.Add(dr) Dim dr2 As DataRow = fz.NewRow() dr2(0) = DateTime.Now.AddDays(i) dr2(1) = i * 4 fz.Rows.Add(dr2) Next Chart1.Series(0).Points.DataBind(f.DefaultView, "xWerte", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.Int32 End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Chart1.Series(0).Points.DataBind(fz.DefaultView, "xWerteDatum", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.DateTime End Sub End Class
Viele GrüßeThorsten
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 17. Juli 2011 20:25
Alle Antworten
-
Hi,
wird denn überhaup etwas angezeigt dann?
Du könntest mal das standard-databinding verwenden:
Public Class Form1 Dim f As DataTable = New DataTable() Dim fz As DataTable = New DataTable() Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load f.Columns.Add(New DataColumn("xWerte", GetType(Int32))) f.Columns.Add(New DataColumn("yWerte", GetType(Int32))) fz.Columns.Add(New DataColumn("xWerteDatum", GetType(DateTime))) fz.Columns.Add(New DataColumn("yWerte", GetType(Int32))) For i As Integer = 0 To 4 Dim dr As DataRow = f.NewRow() dr(0) = i dr(1) = i * 3 f.Rows.Add(dr) Dim dr2 As DataRow = fz.NewRow() dr2(0) = DateTime.Now.AddDays(i) dr2(1) = i * 4 fz.Rows.Add(dr2) Next Chart1.Series(0).Points.DataBind(f.DefaultView, "xWerte", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.Int32 End Sub Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Chart1.Series(0).Points.DataBind(fz.DefaultView, "xWerteDatum", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.DateTime End Sub End Class
Viele GrüßeThorsten
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 17. Juli 2011 20:25
-
Hallo
Der Chart wurde auch nach dem Wechsel von Datum zu Double-Werten normal angezeigt. Nur die Achsenbeschriftung bleibt bei Datum und wechselt nicht auf normale Zahlen. Ich habe herausgefunden, dass bei genug grossen Zahlenwerten im Diagramm immernoch die Datumsbeschriftung vorhanden ist. Bei kleineren Zahlen stehen einfach garkeine Werte auf der Achse.
Meine momentane Lösung ist etwas unschön, aber funktioniert grundsätzlich. Nicht nur die Series, sondern auch die ChartAreas löschen und neu hinzufügen bevor die Datenquelle gewechselt wird.
Energiedatenbank.Chart1.ChartAreas.Clear()
Energiedatenbank.Chart1.ChartAreas.Add("ChartArea1")Irgendwie muss in der ChartArea die Information gespeichert sein, dass auf der x-Achse Datumswerte waren. Nur mit der Angabe des ChartValueType.Double funktioniert das ändern des Datentyps bei mir immernoch nicht.
Gruss Martin
-
Hi,
nach dem Zuweisen der neuen Werte an die Series.Points, führe
Chart1.ResetAutoValues()
aus, dann sollte es gehen.
Also etwa (bezogen auf obiges Example)
Chart1.Series(0).Points.DataBind(f.DefaultView, "xWerte", "yWerte", Nothing) Chart1.Series(0).XValueType = DataVisualization.Charting.ChartValueType.Int32 Chart1.ResetAutoValues()
Viele Grüße,
Thorsten
- Als Antwort markiert Thorsten DörflerModerator Sonntag, 17. Juli 2011 20:25