C#枚举类型绑定到ComboBox并取值使用

 

方法一:

枚举类型直接绑定

enum TestEnum {
    zero=0,
    one=1,
    two=2
    }       

ComboBox cbo = new ComboBox();
cbo.DataSource = System.Enum.GetNames(typeof(TestEnum));

TestEnum  test = TestEnum .one;

cbo.SelectedIndex = this.cbo.FindString(test.ToString());

//取值

TestEnum testenum = (TestEnum)Enum.Parse(typeof(TestEnum) ,cbo.SelectedItem.ToString() ,false)

方法二:

        /// <summary>
        /// 将指定的枚举型绑定至指定的ComboBox,结果表示是否绑定成功。
        /// 用法示例:Bind<LogType>(comboBox1);
        /// </summary>
        /// <param name="cb">下拉框。</param>
        /// <param name="type">枚举类型。</param>
        /// <returns></returns>
        public static bool BindEnumToComboBox<T>(ComboBox cb)
        {
            Type type = typeof(T);
            if (!type.IsEnum || Enum.GetValues(type).Length == 0 || cb == null)
                return false;

            cb.Items.Clear();
            foreach (var item in Enum.GetValues(type))
            {
                cb.Items.Add(item.ToString());
            }

            // 默认选择第0项。
            cb.SelectedIndex = 0;
            // 这里不是必需的,但是由于枚举型不能有额外的,所以设置为 DrawDownList.
            cb.DropDownStyle = ComboBoxStyle.DropDownList;

            return true;
        }



        /// <summary>
        /// 根据ComboBox的选定字符串,返回指定的枚举类型。如果转换失败,则返回缺少值。
        /// 用法示例:LogType lt = GetEnumFromComboBox<LogType>(comboBox1);
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cb"></param>
        /// <returns></returns>

        public static T GetEnumFromComboBox<T>(ComboBox cb)
        {
            T t = default(T); // 先初始化的默认值。
            try
            {
                t = (T)Enum.Parse(typeof(T), cb.SelectedItem.ToString()); // 进行类型转换。
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message); // 可以根据需要做相应的异常处理。 
            }

            return t;
        }

 

public enum SiemensPLCS
    {
        S1200 = 1,
        S300 = 2,
        S400 = 3,
        S1500 = 4,
        S200Smart = 5,
        S200 = 6
    }

方法调用:

 

//把西门子的型号绑定到名为cbPLCModel的ComboBox
BindEnumToComboBox<SiemensPLCS>(cbPLCModel);   

//从SiemensPLCS枚举框中选取值
SiemensPLCS PLCmodel = GetEnumFromComboBox<SiemensPLCS>(cbPLCModel);   

 

方法三:

foreach (var v in typeof(AA).GetFields())
{
     if (v.FieldType.IsEnum == true)
     {
          this.comboBox1.Items.Add(v.Name);
      }
}

 if (comboBox1.Items.Contains("ZDesigner GK888t (EPL)"))
            {
                comboBox1.Text = "ZDesigner GK888t (EPL)";
            }
this.comboBox1.SelectedIndex = 1;

方法四:

反射,枚举,绑定下拉框

public static class EnumManager<TEnum>
{
    private static DataTable GetDataTable()
    {
       Type enumType = typeof(TEnum); // 获取类型对象
       FieldInfo[] enumFields = enumType.GetFields();    //获取字段信息对象集合

       DataTable table = new DataTable();
       table.Columns.Add("Name", Type.GetType("System.String"));
       table.Columns.Add("Value", Type.GetType("System.Int32"));
       //遍历集合
       foreach (FieldInfo field in enumFields)
       {
           if (!field.IsSpecialName)
           {
               DataRow row = table.NewRow();
              row[0] = field.Name;   // 获取字段文本值
              row[1] = Convert.ToInt32(field.GetRawConstantValue());        // 获取int数值
              //row[1] = (int)Enum.Parse(enumType, field.Name); 也可以这样

              table.Rows.Add(row);
           }
       }
       return table;
    }

    public static void SetListControl(ListControl list)
    {
       list.DataSource = GetDataTable();
       list.DataTextField = "Name";
       list.DataValueField = "Value";
       list.DataBind();
    }
}


public enum BookingStatus {
    未提交 = 1,
    已提交,
    已取消,
    已完成 = 6
}

调用

EnumManager<BookingStauts>.SetListControl(ddlBookingStatus);
EnumManager<TicketStatus>.SetListControl(rblTicketStatus);

 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值