2013-05-01 215 views
0

我目前拥有从枚举中填充字幕和列名的网格。重新枚举枚举

private enum enumCaptions 
{ 
    [Description("Status")] 
    Active, 
    [Description("Part number")] 
    Part, 
    [Description("Level")] 
    Change, 
    [Description("Project")] 
    Program, 
    [Description("Location")] 
    Location 
} 

功能,允许我看描述,基于价值选择

public class classStatics 
{ 

    public static string GetEnumDescription(Enum value) 
    { 
     //method to read description of the enumeration 
     FieldInfo fi = value.GetType().GetField(value.ToString()); 
     DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
     if (attributes != null && attributes.Length > 0) 
      return attributes[0].Description; 
     else 
      return value.ToString(); 
    } 
} 

和方法,这样做只是通过我的枚举循环和列指定标题和名字

private void fillGridCaptions() 
{ 
    int i = 1; 

    grdMy.Cols.Count = Enum.GetValues(typeof(enumCaptions)).Length + 1; 

    foreach (int value in Enum.GetValues(typeof(enumCaptions))) 
    { 

     //assign name for every column from enum 
     grdMy.Cols[i].Name = Enum.GetName(typeof(enumCaptions), value); 
     //assign caption for every column 
     grdMy[0, i] = classStatics.GetEnumDescription((enumCaptions)value).ToString(); 

     i++; 
    } 
} 

因为我有几个网格,但他们都应该有不同的数据和标题,我想创建泛型函数,将采取任何网格名称,任何枚举和将描述分配给网格标题。 但是我得到描述的部分不再工作了,枚举字幕Enum不再被识别为Enum,但Name值正确返回。

private void gridCaptions(FlexGrid gridName, Enum captionsEnum) 
{ 
    int i = 1; 
    gridName.Cols.Count = Enum.GetValues(captionsEnum.GetType()).Length + 1; 
    foreach (int value in Enum.GetValues(captionsEnum.GetType())) 
    { 
     gridName.Cols[i].Name = Enum.GetName(captionsEnum.GetType(), value); 
     //assign caption for every column 

     gridName[0, i] = classStatics.GetEnumDescription(captionsEnum); 
     i++; 
    } 
} 
private void fillGridCaptions() 
{ 
    gridCaptionsgrdMy, new enumCaptions()); 
} 

任何帮助将不胜感激。 谢谢。

回答

0

如果已经修改了一下你的代码。我修改下列行:

  • 在for循环中,valueint变为object,存储不是数字,而是从枚举的实际零件。
  • anyGrid.Cols [i] .Name现在直接赋值给枚举项的字符串表示。
  • anyGrid [0,i]仍然分配有说明。该功能可以通过投射到Enum来调用。当它是一个int时,这是不可能的,因为enum的类型在一般情况下是未知的。

代码:

private void gridCaptions(FlexGrid anyGrid, Enum anyEnum) 
{ 
     int i = 1; 
     anyGrid.Cols.Count = Enum.GetValues(anyEnum.GetType()).Length + 1; 
     foreach (object value in Enum.GetValues(anyEnum.GetType())) 
     { 
      anyGrid.Cols[i].Name = value.ToString(); 
      anyGrid[0, i] = classStatics.GetEnumDescription((Enum)value); 
      i++; 
     } 
} 
+0

这做什么他原来fillGridCaptions一样。我认为gridCaptions的意义在于使他能够传递他想要在列中使用的枚举标志。 – MisterXero 2013-05-01 18:38:23

+0

@MisterXero:我将一些参数重命名为更通用的名称。注意:这些只是名称,不是数据类型。现在它给我的答案实际上做了更好的印象。 – 2013-05-01 18:42:17

+0

他的原始方法gridCaptions不是做同样的事情吗? – MisterXero 2013-05-01 18:46:54