Bind Combobox with Enum Description

后端 未结 2 1424
没有蜡笔的小新
没有蜡笔的小新 2021-02-13 23:18

I have seen through Stackoverflow that there is an easy way to populate a combobox with an Enumeration:

cbTipos.DataSource = Enum.GetValues(typeof(TiposTrabajo))         


        
2条回答
  •  心在旅途
    2021-02-13 23:43

    Here is what I came up with since I needed to set the default as well.

    public static void BindEnumToCombobox(this ComboBox comboBox, T defaultSelection)
    {
        var list = Enum.GetValues(typeof(T))
            .Cast()
            .Select(value => new
            {
                Description = (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute)?.Description ?? value.ToString(),
                Value = value
            })
            .OrderBy(item => item.Value.ToString())
            .ToList();
    
        comboBox.DataSource = list;
        comboBox.DisplayMember = "Description";
        comboBox.ValueMember = "Value";
    
        foreach (var opts in list)
        {
            if (opts.Value.ToString() == defaultSelection.ToString())
            {
                comboBox.SelectedItem = opts;
            }
        }
    }
    

    Usage:

    cmbFileType.BindEnumToCombobox(FileType.Table);
    

    Where cmbFileType is the ComboBox and FileType is the enum.

提交回复
热议问题