12

我正在编写的 Winforms 应用程序中使用 MS 图表控件。我正在显示的散点图的 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 轴标签本身。

有任何想法吗?

4

2 回答 2

6

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

一种可能的方法是订阅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();
    }
}
于 2012-03-04T17:31:10.847 回答
1

你有没有试过

 yourSeries.XValueType = ChartValueType.Time;
于 2011-02-17T12:27:38.293 回答