How do you bind an Enum to a DropDownList control in ASP.NET?


Let's say I have the following simple enum:

enum Response
    Yes = 1,
    No = 2,
    Maybe = 3

How can I bind this enum to a DropDownList control so that the descriptions are displayed in the list as well as retrieve the associated numeric value (1,2,3) once an option has been selected?

9/15/2008 7:03:32 AM

Accepted Answer

I probably wouldn't bind the data as it's an enum, and it won't change after compile time (unless I'm having one of those stoopid moments).

Better just to iterate through the enum:

Dim itemValues As Array = System.Enum.GetValues(GetType(Response))
Dim itemNames As Array = System.Enum.GetNames(GetType(Response))

For i As Integer = 0 To itemNames.Length - 1
    Dim item As New ListItem(itemNames(i), itemValues(i))

Or the same in C#

Array itemValues = System.Enum.GetValues(typeof(Response));
Array itemNames = System.Enum.GetNames(typeof(Response));

for (int i = 0; i <= itemNames.Length - 1 ; i++) {
    ListItem item = new ListItem(itemNames[i], itemValues[i]);
11/28/2012 5:15:35 PM

Use the following utility class Enumeration to get an IDictionary<int,string> (Enum value & name pair) from an Enumeration; you then bind the IDictionary to a bindable Control.

public static class Enumeration
    public static IDictionary<int, string> GetAll<TEnum>() where TEnum: struct
        var enumerationType = typeof (TEnum);

        if (!enumerationType.IsEnum)
            throw new ArgumentException("Enumeration type is expected.");

        var dictionary = new Dictionary<int, string>();

        foreach (int value in Enum.GetValues(enumerationType))
            var name = Enum.GetName(enumerationType, value);
            dictionary.Add(value, name);

        return dictionary;

Example: Using the utility class to bind enumeration data to a control

ddlResponse.DataSource = Enumeration.GetAll<Response>();
ddlResponse.DataTextField = "Value";
ddlResponse.DataValueField = "Key";

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow