2009-10-20 12 views
12

मैं एक विनफॉर्म ऐप में एमएस चार्ट नियंत्रण का उपयोग कर रहा हूं जिसे मैं लिख रहा हूं। स्कैटर प्लॉट का एक्स-अक्ष घटक मैं प्रदर्शित कर रहा हूं Int64 डेटा है, जो अंत में एक यूटीसी समय का प्रतिनिधित्व करता है। मैं उस Int64 डेटा को लेना चाहता हूं और अनिवार्य रूप से डेटाटाइम करता हूं। FromFileTimeUTC (theTime)। ToString() पर अंत उपयोगकर्ता एक्स-अक्ष लेबल दिखाने के लिए अर्थपूर्ण हैं।एमएस चार्ट नियंत्रण धुरी स्वरूपण

वर्तमान में, मैं इन-स्मृति DataTable में एक और स्तंभ बना रहा हूं तो जैसे कि Int64 की दिनांक समय बराबर पकड़ करने के लिए:

dataTable.Columns.Add("mytimestamp"); 
foreach (DataRow dr in dataTable.Rows) 
{ 
    dr["mytimestamp"] = DateTime.FromFileTimeUTC(Convert.ToInt64(dr["theint64val"].ToString())); 
} 

और फिर x- अक्ष मूल्य के रूप में "mytimestamp" स्तंभ का उपयोग । यह ठीक काम करता है और मैं एक्स-अक्ष लेबल को डेटाटाइम मान के रूप में दिखा सकता हूं।

लेकिन, मैं कॉलम बनाने की अनिवार्यता से गुजरना नहीं चाहता और अनिवार्य रूप से अन्य कॉलम के डेटा को डुप्लिकेट करना चाहता था लेकिन एक्स-अक्ष लेबल को प्रारूपित करने का कोई तरीका नहीं देखा। मुझे यह याद आ गया है, मुझे लगता है। मैंने प्रलेखन में एक्सिस व्यू चेंज इवेंट देखा और देखा कि मैं उस डेटा के साथ चार्ट शीर्षक कैसे सेट कर सकता हूं लेकिन एक्स-अक्ष लेबल स्वयं नहीं।

कोई विचार?

+0

आप एक समाधान पाया है? – NicoTek

+0

@ निकोटेक: मैंने एक उत्तर प्रदान किया ... – digEmAll

उत्तर

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

संबंधित मुद्दे