如何获取枚举值?

问题描述:

我将它们绑定到下拉像如何获取枚举值?

ddlCompQuarter.DataSource = Enum.GetNames(typeof(CompanyQuarters)); 
ddlCompQuarter.DataBind(); 

现在我想获取下拉列表选择的值。对于例如用于选择列表我已经定义枚举像

public Enum CompanyQuarters 
{ 
    First=1, 
    Second=2, 
    Third=3, 
    Fourth=4 
} 

“第二”我喜欢取2 ?

这不起作用

int selectedVal = int.Parse(ddlCompQuarter.SelectedValue.ToString()); 
+0

顺便说一句,什么是'CompanyQuarters'? (你刚刚提供了ActiveQuarters) – sll 2012-03-06 11:54:21

+0

我的不好,只是一个错字(更正后) – 2012-03-06 12:01:34

+0

可能重复的[如何通过键名获取枚举值](http://stackoverflow.com/questions/540746/how-to-get -enum-value-by-keyname) – 2012-03-10 07:06:12

ActiveQuarters value = (ActiveQuarters)Enum.Parse(typeof(ActiveQuarters),ddlCompQuarter.SelectedValue.ToString()); 

让你的枚举,或者如果您使用的是点NET框架4或更高,看到Enum.TryParse

ActiveQuarters value; 
Enum.TryParse<ActiveQuarters>(ddlCompQuarter.SelectedValue.ToString(), out value); 
+0

感谢您的出色反应。 – 2012-03-06 17:38:51

你需要使用Enum.Parse,然后你可以从组合框

ActiveQuarters typedValue = (ActiveQuarters)Enum.Parse(typeof(ActiveQuarters), 
               ddlCompQuarter.SelectedValue); 

// If you need numeric value 
int numericValue = (int)typedValue; 

CompanyQuarters comp= (CompanyQuarters)Enum.Parse(ddlCompQuarter.SelectedValue); 

您可以使用Enum.Parse

var val = (int)(ActiveQuarters)Enum.Parse(typeof(ActiveQuarters), 
              ddlCompQuarter.SelectedValue.ToString()); 

而且我觉得你的代码有问题,你定义ActiveQuarters枚举和绑定CompanyQuarters

你必须改变你在那里得到名字的方式。

http://blogs.msdn.com/b/tims/archive/2004/04/02/106310.aspx

在这里,我向您展示使用枚举的最佳方式:

public enum enumVIPBusinessPlanPaymentType { 
    [Description("Monthly")] 
    Monthly = 1, 
    [Description("Paid In Full (PIF)")] 
    PaidInFull = 2, 
    [Description("Barter")] 
    Barter = 3 } 

,并创建一个EnumHelper.cs类读取它的值或描述

public static Int32 GetIntValue(Enum en) 
    { 
     Type type = en.GetType(); 
     return TemplateControlExtension.GetInt32(null, en); 
    } 

public static string GetStringNameFromValue(Enum en) 
    { 
     Type type = en.GetType(); 
     MemberInfo[] info = type.GetMember(en.ToString()); 
     if (info != null && info.Length > 0) 
     { 
      object[] attrs = info[0].GetCustomAttributes(typeof(DescriptionAttribute), false); 
      if (attrs != null && attrs.Length > 0) 
      { 
       return ((DescriptionAttribute)attrs[0]).Description; 
      } 
     } 
     return TemplateControlExtension.GetString(null, en); 
    } 

我希望它会像你

+0

不错,我喜欢你的做法,很干净。 – 2012-03-06 18:02:47

+0

@DamienJoe:谢谢Dude ... – 2012-03-07 13:34:35

你必须设置文本和值属性在绑定时下拉。 对于值字段,你可以使用

Enum.GetValues(typeof运算(EnumProvider.CompanyQuarters))