2009-10-20 15 views
12

Estoy usando el MS Chart Control en una aplicación de Winforms que estoy escribiendo. El componente del eje X del diagrama de dispersión que estoy visualizando es información de Int64, que finalmente representa una hora UTC. Me gustaría tomar los datos de Int64 y, básicamente, hacer un DataTime.FromFileTimeUTC (theTime) .ToString() en él para mostrar las etiquetas del eje X del usuario final que son significativas.MS Chart Control axis formateando

Actualmente, estoy creando otra columna en el DataTable en-memoria para contener el equivalente de DateTime que Int64 así:

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

Y a continuación, utilizando la columna "mytimestamp" como el valor del eje x . Esto funciona bien y puedo mostrar las etiquetas del eje x como valores de fecha y hora.

Pero, prefiero no tener el problema de crear la columna y esencialmente duplicar los datos de la otra columna, pero no veo ninguna forma de formatear las etiquetas del eje x. Podría haberme perdido esto, supuse. Vi el evento AxisViewChanged en la documentación y vi cómo podría establecer el título del gráfico con esos datos, pero no las etiquetas del eje x.

¿Alguna idea?

+0

que han encontrado una solución? – NicoTek

+0

@NicoTek: proporcioné una respuesta ... – digEmAll

Respuesta

1

Did se trató de

yourSeries.XValueType = ChartValueType.Time; 
5

Estoy muy tarde, pero espero que esto puede ser útil para otras personas ...

Una posible manera de hacer esto es suscribirse al evento chart.FormatNumber, p.ej :

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

Desde este controlador de eventos se llama durante la conversión de varios elementos de la tabla, para asegurarse de que formatear única el eje deseado, se puede pasar a un formato personalizado a las etiquetas de los ejes:

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

a continuación, añadir una marca en el controlador de eventos:

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

Gracias, @digEmAll, ¡eso ayudó! – BeemerGuy

Cuestiones relacionadas