2009-07-06 14 views
8

繼位從this question,如果我有這個類:是否有屬性可以用於屬性來告訴DataGridView如何格式化列?

private class MyClass { 
    [DisplayName("Foo/Bar")] 
    public string FooBar { get; private set; } 
    public decimal Baz { get; private set; } 
} 

我想顯示在DataGridView(帶自動生成的列)一個List<MyClass>,什麼是做格式化爲巴茲列顯示的最簡單方法貨幣?

是否有我可以使用的屬性,如我正在使用DisplayName,還是我必須在創建它們之後弄亂這些列?

回答

5

我知道它並不完美,但您可以添加另一個名爲CurrencyBaz的屬性,該屬性基本上會返回格式化的Baz,然後將其綁定到網格而不是真正的Baz。

所以這樣的事情。

private class MyClass { 
    [DisplayName("Foo/Bar")] 
    public string FooBar { get; private set; } 
    [Browsable(False)] 
    public decimal Baz { get; private set; } 
    [DisplayName("Baz")] 
    public CurrencyBaz 
    { 
     get { return string.Format(Baz, "C2"); } 
    } 
} 
+0

這會爲我工作(固定有點雖然)。我會接受,如果沒有人提出更好的東西。 – Blorgbeard 2009-07-06 04:05:36

+0

雖然它不會正確對齊列,當然..雖然足夠好,但我正在做的:) :) – Blorgbeard 2009-07-06 04:07:15

5

TypeConverterAttribute - 是這樣的:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Globalization; 
using System.Windows.Forms; 
static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form { Controls = { 
      new DataGridView { 
       Dock = DockStyle.Fill, 
       DataSource = new List<MyClass> { 
        new MyClass { FooBar = "abc", Baz = 123.45M}, 
        new MyClass { FooBar = "def", Baz = 678.90M} 
       } 
      } 
     }}); 
    } 
} 
class MyClass 
{ 
    [DisplayName("Foo/Bar")] 
    public string FooBar { get; set; } 
    [TypeConverter(typeof(CurrencyConverter))] 
    public decimal Baz { get; set; } 
} 
class CurrencyConverter : DecimalConverter 
{ 
    public override object ConvertFrom(ITypeDescriptorContext context, 
     CultureInfo culture, object value) 
    { 
     string s = value as string; 
     if (s != null) return decimal.Parse(s, NumberStyles.Currency, culture); 
     return base.ConvertFrom(context, culture, value); 
    } 
    public override object ConvertTo(ITypeDescriptorContext context, 
     CultureInfo culture, object value, Type destinationType) 
    { 
     if (destinationType == typeof(string)) 
     { 
      return ((decimal)value).ToString("C2", culture); 
     } 
     return base.ConvertTo(context, culture, value, destinationType); 
    } 
} 
相關問題