asp.net 枚举文件里面的数字绑定到DropDownList里面去

复制代码 代码如下:

  public class AppEnum

  {

  public enum PointLogType : int

  {

  /// <summary>

  /// Email确认

  /// </summary>

  [Description("Email确认")]

  Recruit = 1, //新客户激活+

  /// <summary>

  /// 老客户回馈

  /// </summary>

  [Description("老客户回馈")]

  Veteran = 2, //老客户购物历史回复

  /// <summary>

  /// 生成订单

  /// </summary>

  [Description("生成订单")]

  CreateOrder = 3, //下订单-

  /// <summary>

  /// 作废订单

  /// </summary>

  [Description("作废订单")]

  AbandonSO = 5, //作废订单

  /// <summary>

  /// 作废订单取消

  /// </summary>

  [Description("作废订单取消")]

  CancelAbandonSO = 6, //审核作废取消-

  /// <summary>

  /// 退货

  /// </summary>

  [Description("退货")]

  ReturnProduct = 7, //退货-

  /// <summary>

  /// 取消退货

  /// </summary>

  [Description("取消退货")]

  CancelReturn = 8,

  /// <summary>

  /// 取消出库

  /// </summary>

  [Description("取消出库")]

  CancelOutstock = 9, //取消出货

  /// <summary>

  /// 积分转移

  /// </summary>

  [Description("积分转移")]

  TransferPoint = 10, //积分转移

  /// <summary>

  /// 购物得分

  /// </summary>

  [Description("购物得分")]

  AddPointLater = 11, //滞后加分

  /// <summary>

  /// 订单修改

  /// </summary>

  [Description("订单修改")]

  UpdateSO = 12, //修改SaleOrder

  /// <summary>

  /// 批发扣除

  /// </summary>

  [Description("批发扣除")]

  WholeSale = 13, //批发减分-, 好象没有使用。

  /// <summary>

  /// 买卡

  /// </summary>

  [Description("买卡")]

  InfoProduct = 14, //买卡减分-

  /// <summary>

  /// 其他

  /// </summary>

  [Description("其他")]

  BizRequest = 15, //Request

  /// <summary>

  /// 商品评论送积分

  /// </summary>

  [Description("商品评论送积分")]

  Remark = 16, //Remark

  /// <summary>

  /// 注册送积分

  /// </summary>

  [Description("注册送积分")]

  NewRegister = 17, //注册送积分

  /// <summary>

  /// DIY活动积分增减

  /// </summary>

  [Description("DIY活动积分增减")]

  DIY = 18, //DIY活动积分增减, 成都DIY系统,没有用起来。

  /// <summary>

  /// 系统转移积分

  /// </summary>

  [Description("系统转移积分")]

  SysTransferPoint = 19, //系统帐号neweggcs转移积分给客户

  /// <summary>

  /// 系统帐号增加积分

  /// </summary>

  [Description("系统帐号增加积分")]

  AddPointToSysAccounts = 20, //财务给系统帐号增加积分

  /// <summary>

  /// 参加竞猜

  /// </summary>

  [Description("参加竞猜")]

  BetReductPoint = 21, //下注使用积分

  /// <summary>

  /// 竞猜所得

  /// </summary>

  [Description("竞猜所得")]

  BetAddPoint = 22, //开奖得积分

  /// <summary>

  /// 新用户第一次购物赠送积分

  /// </summary>

  [Description("新用户第一次购物赠送积分")]

  NewCustomerFirstBuy = 23, //新注册用户,第一次购物送积分

  /// <summary>

  /// 自动提升精华赠送积分

  /// </summary>

  [Description("自动提升精华赠送积分")]

  SetScoreAuto = 24, //自动提升精华赠送积分

  /// <summary>

  /// 市场促销活动增送积分

  /// </summary>

  [Description("市场促销活动增送积分")]

  MKTCampaign = 25,

  /// <summary>

  /// 到期回收积分

  /// </summary>

  [Description("到期回收积分")]

  DisusePoint = -1

  }

  }

  上面是一个枚举列表,怎么去读取呢?用一个DDR来绑定呢?

  

复制代码 代码如下:

  ddlType.DisplayMember = "Value";

  ddlType.ValueMember = "Key";

  ddlType.DataSource = CommonFunctions.GetEnumItems(typeof(AppEnum.PointLogType), false);

  ddlType.SelectedValue = 25; // 默认值

  下面是CommonFunctions里面的GetEnumItems方法:

  

复制代码 代码如下:

  /// <summary>

  /// 获得枚举类型所包含的全部项的列表。

  /// </summary>

  /// <param name="enumType">枚举的类型</param>

  /// <param name="withAll">是否包含"All"</param>

  /// <returns></returns>

  public static List<EnumItem> GetEnumItems(Type enumType, bool withAll)

  {

  List<EnumItem> list = new List<EnumItem>();

  if (enumType.IsEnum != true)

  {

  // 不是枚举类型

  throw new InvalidOperationException();

  }

  // 包含 All 选项

  if (withAll == true)

  list.Add(new EnumItem(AppConst.IntNull, "All"));

  // 获得特性Description的类型信息

  Type typeDescription = typeof(DescriptionAttribute);

  // 获得枚举的字段信息(因为枚举的值实际上是一个static的字段的值)

  System.Reflection.FieldInfo[] fields = enumType.GetFields();

  // 检索所有字段

  foreach (FieldInfo field in fields)

  {

  // 过滤掉一个不是枚举值的,记录的是枚举的源类型

  if (field.FieldType.IsEnum == false)

  continue;

  // 通过字段的名字得到枚举的值

  int value = (int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);

  string text = string.Empty;

  // 获得这个字段的所有自定义特性,这里只查找Description特性

  object[] arr = field.GetCustomAttributes(typeDescription, true);

  if (arr.Length > 0)

  {

  // 因为Description自定义特性不允许重复,所以只取第一个

  DescriptionAttribute aa = (DescriptionAttribute)arr[0];

  // 获得特性的描述值

  text = aa.Description;

  }

  else

  {

  // 如果没有特性描述,那么就显示英文的字段名

  text = field.Name;

  }

  list.Add(new EnumItem(value, text));

  }

  return list;

  }

  public class EnumItem

  {

  private object m_key;

  private object m_value;

  public object Key

  {

  get { return m_key; }

  set { m_key = value; }

  }

  public object Value

  {

  get { return m_value; }

  set { m_value = value; }

  }

  public EnumItem(object _key, object _value)

  {

  m_key = _key;

  m_value = _value;

  }

  }