我正在编写的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轴标签本身。
有什么想法吗?
答案 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;