我正在写一个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轴标签本身.
有任何想法吗?
我很迟,但我希望这对其他人有用......
一种可能的方法是订阅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(); } }