Использование Enum Description для ComboBox - PullRequest
0 голосов
/ 09 декабря 2018

Я использую различные перечисления и списки в системе, которую я программирую.У меня есть некоторые перечисления с такими описаниями:

public enum Week
{
    [Description("Week 01")]
    Week01,
    [Description("Week 02")]
    Week02,
    [Description("Week 03")]
    Week03,
    [Description("Week 04")]
    Week04,
    [Description("Week 05")]
    Week05
}

И:

public enum Year
{
    [Description("2000")]
    Y2000,
    [Description("2001")]
    Y2001,
    [Description("2002")]
    Y2002,
    [Description("2003")]
    Y2003,
    [Description("2004")]
    Y2004,
    [Description("2005")]
    Y2005
}

Для комбинированных списков я использовал этот простой код:

weekComboBox.DataSource = Enum.GetValues(typeof(Week));
yearComboBox.DataSource = Enum.GetValues(typeof(Year));

Это установка обычных значений перечисления, как и следовало ожидать.Я хотел бы, чтобы он отображал атрибут [Description()] («Неделя 01» или «2002») вместо Week01 или Y2002.Я видел множество способов получить это, но я не смог заставить его тянуть описания, отображаемые в выпадающих списках.

Я хотел бы иметь одинметод настроен, что я могу просто сослаться на каждый из списков?Нужно ли мне вместо этого устанавливать метод для каждого набора перечислений?

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 09 декабря 2018
public static class EnumList
{
    public static IEnumerable<KeyValuePair<T, string>> Of<T>()
    {
        return Enum.GetValues(typeof(T))
            .Cast<T>()
            .Select(p => new KeyValuePair<T, string>(
                p,                   
                (p.GetType().GetField(p.ToString())
                .GetCustomAttributes(typeof(DescriptionAttribute), false)
                .FirstOrDefault() as DescriptionAttribute)?.Description ?? p.ToString()
                ))
                .ToList();
    }
}

и затем:

weekComboBox.DisplayMember = "Value"; 
weekComboBox.ValueMember = "Key"; 
weekComboBox.DataSource = EnumList.Of<Week>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...