【问题标题】:MS Chart Control axis formattingMS 图表控制轴格式
【发布时间】:2009-10-20 13:59:22
【问题描述】:

我正在编写的 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 轴标签本身。

有什么想法吗?

【问题讨论】:

  • @NicoTek:我提供了答案...

标签: c# winforms mschart


【解决方案1】:

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

一种可能的方法是订阅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();
    }
}

【讨论】:

  • 谢谢@digEmAll,帮了大忙!
【解决方案2】:

你试过了吗

 yourSeries.XValueType = ChartValueType.Time;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多