2012-01-11 10 views
3

列挙型の説明に問題があります。 私は、DataGridがenumの説明を表示し、列挙型の "ToString()"を表示しないようにします。DataGridViewの列挙型説明

enum DirectionEnum 
{ 
    [Description("Right to left")] 
    rtl, 

    [Description("Left to right")] 
    ltr 
} 
class Simple 
{ 
    [DisplayName("Name")] 
    public string Name { get; set; } 

    [DisplayName("Direction")] 
    public DirectionEnum dir { get; set; } 
} 
class DirectionDialog : Form 
{ 
    public DirectionDialog() 
    { 
     DataGridView table = new DataGridView(); 
     List<Simple> list = new List<Simple>(new Simple[]{ 
      new Simple{ Name = "dave", dir = DirectionEnum.ltr}, 
      new Simple{ Name = "dan", dir = DirectionEnum.rtl } 
     }); 
     table.DataSource = list; 
     //view "rtl" or "ltr" in "Direction" 
     //I want "Right to left" or "Left to right: 
    } 
} 

私は列挙型の説明で方向の列を見たいと思っています。 私は何をしていますか? 私の悪い英語を申し訳ありません。

答えて

2
class Simple 
{ 
    [DisplayName("Name")] 
    public string Name { get; set; } 

    // Remove external access to the enum value 
    public DirectionEnum dir { private get; set; } 

    // Add a new string property for the description 
    [DisplayName("Direction")] 
    public string DirDesc 
    { 
     get 
     { 
      System.Reflection.FieldInfo field = dir.GetType().GetField(dir.ToString()); 

      DescriptionAttribute attribute 
        = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) 
         as DescriptionAttribute; 

      return attribute == null ? dir.ToString() : attribute.Description; 
     } 
    } 
} 
+0

そして、それがenumの値を変更した後にしたいのですか? – zardav

+0

いいえいいえいいえ、列挙型の値を取得する必要があります。 – zardav

+0

このオブジェクトから列挙型の値を取得するには、すぐに考えることができる少なくとも2つのオプションがあります:1) 'GetDir()'関数を追加して、 DataGridView'。 2) 'Name'と' DirDesc'だけを公開し、Listを 'List 'の代わりに 'List 'として 'DataGridView'に渡す' ISimple'インターフェースから 'Simple'を継承し、後で 'dir'プロパティにアクセスするための単純なものです。 –