There was a question about this on the ASP.NET forums and after a quick search I didn't find a good generic function so I thought I'd supply one.
Note: I wanted this to be as broad and useful as possible, so the second parameter is a ListControl
which both the ListBox
and DropDownList
inherit from.
I also made sure the function would handle enum
s that had non-contiguous values that didn't necessarily start at zero.
The Function
static public void EnumToListBox(Type EnumType, ListControl TheListBox)
{
Array Values = System.Enum.GetValues(EnumType);
foreach (int Value in Values)
{
string Display = Enum.GetName(EnumType, Value);
ListItem Item = new ListItem(Display, Value.ToString());
TheListBox.Items.Add(Item);
}
}
Usage
I tested with an existing enum
and a custom enum
:
enum CustomColors
{
BLACK = -1,
RED = 7,
GREEN = 14,
UNKNOWN = -13
}
protected void Button1_Click(object sender, EventArgs e)
{
EnumToListBox(typeof(DayOfWeek), DropDownList1);
EnumToListBox(typeof(CustomColors), ListBox1);
}
Note: I initially tried to get the order of the items in the ListBox
to match the order of the items in the enum
but both the Enum.GetValues
and Enum.GetNames
functions return the items sorted by the value of the enum
. So if you want the enum
s sorted a certain way, the values of the enum
s must be sorted that way. I think this is reasonable; how the enum
s are physically sorted in the source code shouldn't necessarily have any meaning.
I hope someone finds this useful.