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;
}
}
Je reçois le même "Impossible de convertir le type 'System.Enum' à 'int' " comme quand j'ai essayé (int) enumValue.ToString() – Neil
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 –
@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 . –