2012-01-11 65 views
3

我遇到枚举说明问题。 我想让dataGrid显示枚举描述,而不是枚举的“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: 
    } 
} 

我想通过enum的描述来查看方向列。 我该怎么做? 对不起,我的英语不好。

回答

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

如果我想要改变枚举的值? – zardav 2012-01-19 19:51:06

+0

不不不,不想不,我想要得到枚举值,没有设置。 – zardav 2012-01-19 20:19:54

+0

为了从这个对象中获得枚举的值,你至少有两个选择我可以立即想到:1)添加一个公共'GetDir()'函数,它将允许以编程方式访问,而不会使其作为字段出现在' DataGridView'。 2)继承'Simple'接口,该接口只暴露'Name'和'DirDesc',并将列表作为'List '而不是'List '传递给'DataGridView',然后转换为'简单''稍后访问'dir'属性。 – 2012-01-19 23:01:53