2009-10-20 12 views
12

Sto utilizzando il controllo grafico MS in un'app Winforms che sto scrivendo. Il componente dell'asse X del grafico a dispersione che sto visualizzando è Int64 data, che in definitiva rappresenta un tempo UTC. Mi piacerebbe prendere i dati Int64 e essenzialmente fare un DataTime.FromFileTimeUTC (theTime) .ToString() su di esso per mostrare le etichette dell'asse X dell'utente finale che sono significative.MS Chart Formattazione dell'asse di controllo

Attualmente, sto creando un'altra colonna nel DataTable in-memoria per contenere l'equivalente di DateTime che Int64 in questo modo:

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

e quindi utilizzando la colonna "mytimestamp" come valore asse x . Funziona bene e posso mostrare le etichette dell'asse x come valori datetime.

Ma, preferirei non passare attraverso la difficoltà di creare la colonna e duplicare essenzialmente i dati della seconda colonna, ma non ho visto alcun modo per formattare le etichette dell'asse x. Potrebbe aver perso questo, suppongo. Ho visto l'evento AxisViewChanged nella documentazione e ho visto come potrei impostare il titolo del grafico con quei dati ma non con le etichette dell'asse x.

Qualche idea?

+0

hai trovato una soluzione? – NicoTek

+0

@NicoTek: ho fornito una risposta ... – digEmAll

risposta

1

Forse si è tentato di

yourSeries.XValueType = ChartValueType.Time; 
5

Sono molto in ritardo, ma spero che questo può essere utile per altre persone ...

Un possibile modo per farlo è sottoscrivendo l'evento chart.FormatNumber, per esempio :

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

Poiché questo gestore di eventi viene chiamato durante la conversione di diversi elementi del grafico, per essere sicuri di formattare solo l'asse desiderato, è possibile passare un formato personalizzato per le etichette degli assi:

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

quindi aggiungere un controllo nel gestore di eventi:

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

Grazie, @digEmAll, che ha aiutato! – BeemerGuy

Problemi correlati