I've been wanting to try this concept out for awhile, and I finally had a reasonable opportunity. The idea was to slap a System.ComponentModel.Description attribute onto each field of an Enum, and then bind a dropdown list directly to the Enum.
I got it working and the code is pretty concise. Please excuse the fact that I'm working in VB for this one; it's my DotNetNuke project, and I was already working in VB to edit some modules. The code would be even prettier in C# I imagine.
First, let's decorate an enum. Import System.ComponentModel here.
Next, we need to build a helper routine that can get the description off of a decorated enum field. It must gracefully handle the case when a description is not specified, as with Canada.
In .NET 3.5, you'd probably want to build these as extension methods, which would be a trivial change. Import System.ComponentModel here too.
Now that we can easily grab the description from an enum field, let's build ourselves a new dropdown control.
The usage is quite simple, as the example in the comment shows. Here's the markup for the control:
And in the code-behind, it's wired up as follows:
Here's the result. I chose to have the value of the dropdown be the enum field name rather than its value, because that felt cleaner.
I suspect that there are going to be some goofy bugs in here if this was hit with some complex scenarios. But fortunately for me, this project won't have any complex scenarios.