C#将枚举类型中的所有值绑定到DropDownList控件上

2011-02-22

枚举定义如下:

public enum AlbumType
{
  人物肖像,
  风景名胜,
  动物植物,
  娱乐休闲,
  科技时尚,
  节日聚会,
  静态建筑,
  社会纪实,
  体育活动,
  五花八门
}

第一种方法是直接将枚举的所有值转换成一个List<string>,然后就可以绑定到DropDownList控件上。代码示例如下:

List<string> a = Enum.GetNames(typeof(AlbumType)).ToList<string>();
DropDownList1.DataSource = a;
DropDownList1.DataBind();

这个方法比较简单,简洁!如果想将选中的枚举值转换成int型的话,只需要用SelectedIndex就可以获取了,很方便!但是有的时候要向下拉框中添加一个所有相册类型的选择,这时就会比较麻烦了,不过用刚才的方法还是可以实现的,下面就举个例子:

List<string> a = new List<string>();
a.Add("所有类型");
a.AddRange(Enum.GetNames(typeof(AlbumType)).ToList<string>());
DropDownList1.DataSource = a;
DropDownList1.DataBind();

这样只需要将获得的SelectedIndex减去1就是选中枚举值转换成int型的结果(程序中将“所有类型”认为是-1),这样就实现了刚才的需要!

第二种方法是使用List<ListItem>来实现的,下面也举一个例子:

List<listitem> albumType = new List<listitem>();
albumType.Add(new ListItem("所有类型", "-1"));
foreach(AlbumType type in Enum.GetValues(typeof(AlbumType)))
{
  albumType.Add(new ListItem(type.ToString(), ((int)type).ToString()));
}
DropDownList1.DataSource = albumType;
DropDownList1.DataTextField = "text";
DropDownList1.DataValueField = "value";
DropDownList1.DataBind();

这样实现的话,就不用像前面的方法那样对不上枚举中的值一定要将其认为的-1,这样实现的话使用SelectedValue就是其枚举转换成int型的结果(注意此处为string类型)。

以上两种方法各有优势,推荐使用第一种方法,更简洁一点!