2009-10-20 102 views
12

我正在使用我正在寫的Winforms應用程序中的MS圖表控件。我正在顯示的散點圖的X軸組件是Int64數據,它最終代表UTC時間。我想採用該Int64數據,並基本上做一個DataTime.FromFileTimeUTC(theTime).ToString(),以顯示有意義的最終用戶X軸標籤。MS Chart控制軸格式化

目前,我在內存中的數據表中創建另一列舉行日期時間相當於是Int64的像這樣:

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

你找到一個解決方案? – NicoTek 2012-01-16 18:17:53

+0

@NicoTek:我提供了一個答案... – digEmAll 2012-03-04 17:31:48

回答

1

你有沒有試過

yourSeries.XValueType = ChartValueType.Time; 
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

謝謝,@digEmAll,幫助! – BeemerGuy 2016-05-13 09:29:12