2009-10-20 6 views
12

Ich verwende das MS Chart Control in einer Winforms App, die ich gerade schreibe. Die X-Achsenkomponente des Streudiagramms, das ich zeige, ist Int64-Daten, die letztendlich eine UTC-Zeit darstellen. Ich möchte diese Int64-Daten nehmen und im Wesentlichen eine DataTime.FromFileTimeUTC (theTime) .ToString() darauf ausführen, um die End-User-X-Achsen-Labels anzuzeigen, die aussagekräftig sind.MS Chart Steuerungsachsenformatierung

Derzeit Ich schaffe eine weitere Spalte in der In-Memory-Datentabelle wie so die Datetime Äquivalent dieser Int64 zu halten:

dataTable.Columns.Add("mytimestamp"); 
foreach (DataRow dr in dataTable.Rows) 
{ 
    dr["mytimestamp"] = DateTime.FromFileTimeUTC(Convert.ToInt64(dr["theint64val"].ToString())); 
} 

Und dann mit dem „mytimestamp“ -Spalte als x-Achsen-Wert . Das funktioniert gut und ich kann die X-Achsenbeschriftungen als Datetime-Werte anzeigen.

Aber ich würde lieber nicht die Mühe der Erstellung der Spalte und im Wesentlichen Duplizieren der Daten der anderen Spalte, aber sah keine Möglichkeit, die X-Achsen-Etiketten zu formatieren. Vielleicht habe ich das vermisst, vermutete ich. Ich sah das AxisViewChanged-Ereignis in der Dokumentation und sah, wie ich den Diagrammtitel mit diesen Daten, aber nicht die X-Achsenbeschriftungen selbst festlegen konnte.

Irgendwelche Ideen?

+0

haben Sie eine Lösung gefunden? – NicoTek

+0

@NicoTek: Ich habe eine Antwort ... – digEmAll

Antwort

1

Haben Sie

versucht
yourSeries.XValueType = ChartValueType.Time; 
5

ich sehr spät bin, aber ich hoffe, dass dies für andere Menschen nützlich sein kann ...

Eine Möglichkeit, dies zu tun, um die chart.FormatNumber Ereignis abonniert, z.B :

void chart1_FormatNumber(object sender, FormatNumberEventArgs e) 
{ 
    if (e.ElementType == ChartElementType.AxisLabels && 
     e.ValueType == ChartValueType.Int64) 
    { 
     e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString(); 
    } 
} 

Da diese Event-Handler bei der Konvertierung von mehreren Elementen des Diagramms aufgerufen wird, um sicherzustellen, dass nur die gewünschte Achse zu formatieren, können Sie ein benutzerdefiniertes Format an die Achsenbeschriftungen passieren:

this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MyAxisXCustomFormat"; 

dann einen Scheck in den Event-Handler hinzu:

void chart1_FormatNumber(object sender, FormatNumberEventArgs e) 
{ 
    if (e.ElementType == ChartElementType.AxisLabels && 
     e.ValueType == ChartValueType.Int64 && 
     e.Format == "MyAxisXCustomFormat") 
    { 
     e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString(); 
    } 
} 
+1

Danke, @digEmAll, das hat geholfen! – BeemerGuy