2013-05-14 3 views
8

क्या Winforms के PropertyGrid में प्रदर्शित संख्यात्मक गुणों को प्रारूपित करना संभव है?संपत्ति ग्रिड संख्या स्वरूपण

class MyData 
{ 
     public int MyProp {get; set;} 
} 

और मैं इसे ग्रिड में उदाहरण के लिए 1.000.000 के रूप में प्रदर्शित करना चाहता हूं।

क्या इसके लिए कुछ विशेषताएं हैं?

+0

ऐसा लगता है कि यह तीन गुण होना चाहिए, यानी प्रमुख, मामूली, संशोधन। यदि यह संभव है तो आपको अपना खुद का फॉर्मेटर लिखना होगा जिसे आप स्ट्रिंग.फॉर्मैट – Kcvin

+0

जैसे उपयोग करेंगे। ओपी यूरोपीय नंबरिंग योजना का उपयोग हजारों विभाजक के साथ ''' और' '' जैसा नहीं है, जैसा कि अमेरिका में है। तो प्रश्न _not_ 'संस्करण' स्वरूपण से संबंधित नहीं है, लेकिन संख्यात्मक स्वरूपण। – ja72

उत्तर

11

आप अपने पूर्णांक संपत्ति के लिए कस्टम type converter को लागू करना चाहिए:

class MyData 
{ 
    [TypeConverter(typeof(CustomNumberTypeConverter))] 
    public int MyProp { get; set; } 
} 

PropertyGrid TypeConverter का उपयोग करता स्ट्रिंग है, जो यह ग्रिड में वस्तु मान प्रदर्शित करने के का उपयोग करता है करने के लिए अपने ऑब्जेक्ट प्रकार (इस मामले में पूर्णांक) कन्वर्ट करने के लिए। संपादन के दौरान, टाइप कनवर्टर एक स्ट्रिंग से वापस अपने ऑब्जेक्ट प्रकार में परिवर्तित हो जाता है।

public class CustomNumberTypeConverter : TypeConverter 
{ 
    public override bool CanConvertFrom(ITypeDescriptorContext context, 
             Type sourceType) 
    { 
     return sourceType == typeof(string); 
    } 

    public override object ConvertFrom(ITypeDescriptorContext context, 
     CultureInfo culture, object value) 
    {    
     if (value is string) 
     { 
      string s = (string)value; 
      return Int32.Parse(s, NumberStyles.AllowThousands, culture); 
     } 

     return base.ConvertFrom(context, culture, value); 
    } 

    public override object ConvertTo(ITypeDescriptorContext context, 
     CultureInfo culture, object value, Type destinationType) 
    { 
     if (destinationType == typeof(string)) 
      return ((int)value).ToString("N0", culture); 

     return base.ConvertTo(context, culture, value, destinationType); 
    } 
} 

परिणाम::

propertyGrid.SelectedObject = new MyData { MyProp = 12345678 }; 

enter image description here

तो, आप प्रकार कनवर्टर जो पूर्णांक पूर्णांक के लिए वापस हजार विभाजक के साथ स्ट्रिंग में बदल जाएंगे और इस तरह के स्ट्रिंग पार्स करने में सक्षम होना चाहिए उपयोग करने की आवश्यकता

मैं आपको Getting the Most Out of the .NET Framework PropertyGrid Control एमएसडीएन लेख पढ़ने के लिए अनुशंसा करता हूं कि कैसे संपत्ति ग्रिड डब्ल्यू Orks और इसे कैसे अनुकूलित किया जा सकता है।

+0

एक दिलचस्प चिमटा के रूप में, ऑब्जेक्ट को संदर्भित करने के लिए तर्क 'संदर्भ। बिंदु' इंगित करता है, और यदि कोई स्वरूपण सुराग (जैसे प्रारूप स्ट्रिंग प्रॉपर्टी) मौजूद है तो आप उन्हें 'ToString()' में उपयोग कर सकते हैं। – ja72

5

मैं PropertyGrid में सीधे गुण फ़ॉर्मेट करने के लिए एक तरह से पता नहीं है, लेकिन आप की तरह

class MyData 
{ 
    [Browsable(false)] 
    public int _MyProp { get; set; } 

    [Browsable(true)] 
    public string MyProp 
    { 
     get 
     { 
      return _MyProp.ToString("#,##0"); 
     } 
     set 
     { 
      _MyProp = int.Parse(value.Replace(".", "")); 
     } 
    } 
} 

केवल Browsable(true) संपत्ति PropertyGrid में दिखाया गया है कुछ कर सकते हैं।

+0

यह वास्तव में अनुकूलन के स्तर की वजह से मेरा पसंदीदा समाधान है। – ja72

+0

अधिक संक्षिप्त भी। –

+0

भयानक विचार))) –

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