MS Chart Control轴格式化

时间:2009-10-20 13:59:22

标签: c# winforms mschart

我正在编写的Winforms应用程序中使用MS Chart Control。我正在显示的散点图的X轴分量是Int64数据,最终表示UTC时间。我想获取Int64数据并基本上在其上执行DataTime.FromFileTimeUTC(theTime).ToString()以显示有意义的最终用户X轴标签。

目前,我正在内存中的DataTable中创建另一个列来保存与Int64等效的DateTime,如下所示:

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

然后使用“mytimestamp”列作为x轴值。这很好用,我可以将x轴标签显示为日期时间值。

但是,我宁愿不经历创建列的麻烦,基本上复制其他列的数据,但没有看到任何格式化x轴标签的方法。我猜想可能错过了这个。我在文档中看到了AxisViewChanged事件,看到了如何使用该数据设置图表标题,而不是x轴标签本身。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

我已经很晚了,但我希望这对其他人有用......

执行此操作的一种可能方法是订阅chart.FormatNumber事件,例如:

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

由于在转换图表的多个元素期间调用此事件处理程序,为了确保格式化 所需的轴,您可以将自定义格式传递给轴标签:

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

然后在事件处理程序中添加一个检查:

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 :(得分:1)

你有没有试过

 yourSeries.XValueType = ChartValueType.Time;