2010-10-16 19 views
1

J'ai du code qui lie une énumération à une liste déroulante, cependant, je voudrais construire la liste déroulante pour prendre la valeur entière de l'énumération pour la valeur et la description attribut pour le texte.Coulée enum valeur à int lors de la liaison à la liste déroulante en utilisant la réflexion

J'ai essayé de définir le kvPairList comme int/string et coulée enumValue et un (int) J'ai essayé aussi converting.toInt32

Idées?

<select name="DropDownList1" id="DropDownList1"> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
    <option value="3">Option 3/option> 
</select 

Enum:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.ComponentModel; 

    namespace constants 
    { 
     public enum Options : int 
     { 

      [Description("Option 1")] 
      Option1 = 1, 
      [Description("Option 2")] 
      Option2 = 3, 
      [Description("Option 3")] 
      Option3 = 3 
     } 
    } 

Classe:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using System.ComponentModel; 
using System.Reflection; 

public class EnumDescription 
{ 
    public static string GetDescription(System.Enum value) 
    { 
     FieldInfo FieldInfo = value.GetType().GetField(value.ToString()); 
     DescriptionAttribute[] attributes = (DescriptionAttribute[])FieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); 

     if ((attributes.Length > 0)) 
      return attributes[0].Description; 
     else 
      return value.ToString(); 
    } 

    public static List<KeyValuePair<string, string>> GetValuesAndDescription(System.Type enumType) 
    { 
     List<KeyValuePair<string, string>> kvPairList = new List<KeyValuePair<string, string>>(); 

     foreach (System.Enum enumValue in System.Enum.GetValues(enumType)) 
     { 
      kvPairList.Add(new KeyValuePair<string, string>(enumValue.ToString(), GetDescription(enumValue))); 
     } 

     return kvPairList; 
    } 

} 

Répondre

2

Vous devez jeter réellement à un int avant d'obtenir la représentation de chaîne. Sinon, vous obtenez la représentation de l'énumération plutôt que l'entier.

kvPairList.Add(new KeyValuePair<string, string>(((int)enumValue).ToString(), GetDescription(enumValue))); 

Puisque la valeur est de type System.Enum et non l'ENUM sous-jacente, un casting ne fonctionnera pas. Vous pouvez utiliser la méthode Convert appropriée.

kvPairList.Add(new KeyValuePair<string, string>(Convert.ToInt32(enumValue).ToString(), GetDescription(enumValue))); 
+0

Je reçois le même "Impossible de convertir le type 'System.Enum' à 'int' " comme quand j'ai essayé (int) enumValue.ToString() – Neil

+0

thats parce que ToString() est en cours d'évaluation AVANT (int) . faites ceci: (int) (enumVale.ToString()) si vous voulez la chaine rep de l'int –

+0

@Neil: Dans ce cas, vous devrez utiliser l'une des méthodes de conversion puisque les énumérations sont convertibles en types de valeurs de base . –