2009-10-20 13 views
12

Używam MS Chart Control w aplikacji WinForm, którą piszę. Składnik osi X wykresu rozproszonego, który wyświetlam, to dane Int64, które ostatecznie reprezentują czas UTC. Chciałbym wziąć te dane Int64 i zasadniczo zrobić DataTime.FromFileTimeUTC (theTime) .ToString() na nim, aby pokazać znaczniki osi X użytkownika końcowego, które są znaczące.MS Chart Formatowanie kontrolek osi

Obecnie tworzę inną kolumnę w DataTable w pamięci do przechowywania równowartość DateTime tego Int64 tak:

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

A następnie za pomocą „mytimestamp” kolumnę jako wartości osi x . Działa to dobrze i mogę pokazać etykiety osi X jako wartości datetime.

Ale wolałbym nie kłopotać się tworzeniem kolumny i zasadniczo duplikować dane innych kolumn, ale nie widziałem żadnego sposobu na sformatowanie etykiet osi X. Myślę, że może tęskniłem za tym. Widziałem zdarzenie AxisViewChanged w dokumentacji i zobaczyłem, jak mogę ustawić tytuł wykresu z tymi danymi, ale nie same etykiety osi X.

Wszelkie pomysły?

+0

znalazłeś rozwiązania? – NicoTek

+0

@NicoTek: Podałem odpowiedź ... – digEmAll

Odpowiedz

1

Czy próbowałeś

yourSeries.XValueType = ChartValueType.Time; 
5

Jestem bardzo późno, ale mam nadzieję, że może to być przydatne dla innych ludzi ...

Możliwym sposobem, aby to zrobić, to zapisz zdarzenie chart.FormatNumber, na przykład :

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

Ponieważ obsługi zdarzeń jest wywoływana podczas konwersji kilku elementów na wykresie, aby mieć pewność, aby sformatować tylko pożądaną oś, można przekazać formatu niestandardowego do etykiet osi:

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

następnie dodać czek w obsługi zdarzeń:

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

Dzięki, @digEmAll, które pomogło! – BeemerGuy

Powiązane problemy