当前位置:  开发笔记 > 编程语言 > 正文

MS Chart Control轴格式化

如何解决《MSChartControl轴格式化》经验,为你挑选了1个好方法。

我正在写一个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轴标签本身.

有任何想法吗?



1> digEmAll..:

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

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

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有