[英]Bind Combobox with Enum Description
我已經通過Stackoverflow了解到有一種簡單的方法可以使用Enumeration填充組合框:
cbTipos.DataSource = Enum.GetValues(typeof(TiposTrabajo));
在我的例子中,我為我的枚舉定義了一些描述:
public enum TiposTrabajo
{
[Description("Programacion Otros")]
ProgramacionOtros = 1,
Especificaciones = 2,
[Description("Pruebas Taller")]
PruebasTaller = 3,
[Description("Puesta En Marcha")]
PuestaEnMarcha = 4,
[Description("Programación Control")]
ProgramacionControl = 5}
這工作得很好,但它顯示了值,而不是描述我的問題是我想在組合框中顯示枚舉的描述,當它有描述時,或者在沒有值的情況下顯示值。 如果有必要,我可以為沒有描述的值添加描述。 Thx提前。
試試這個:
cbTipos.DisplayMember = "Description";
cbTipos.ValueMember = "Value";
cbTipos.DataSource = Enum.GetValues(typeof(TiposTrabajo))
.Cast<Enum>()
.Select(value => new
{
(Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()), typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
value
})
.OrderBy(item => item.value)
.ToList();
為了使其工作,所有值必須具有描述,否則您將獲得NullReference異常。 希望有所幫助。
這是我想出來的,因為我也需要設置默認值。
public static void BindEnumToCombobox<T>(this ComboBox comboBox, T defaultSelection)
{
var list = Enum.GetValues(typeof(T))
.Cast<T>()
.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;
}
}
}
用法:
cmbFileType.BindEnumToCombobox<FileType>(FileType.Table);
其中cmbFileType
是ComboBox
, FileType
是enum
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.