需要根据枚举显示复选框列表

时间:2011-09-08 15:42:25

标签: c# asp.net webforms

我需要显示一个复选框列表,每个html表格行有3个。

每个复选框的标签和值将来自枚举。

构建它并在webforms中显示它的最佳方法是什么?

我正在考虑使用文字控件,并在htmltable对象中生成控件。

评论

1 个答案:

答案 0 :(得分:4)

我会考虑带有数据的装饰器模式。

 public enum MyEnum
 {
     [Description("Display Text")]
     SomeEnumValue = 1,

     [Description("More Display Text")]
     AnotherEnumValue = 2
 }

然后你会创建一个获取数据的方法:

public IEnumerable<ListItem> GetListItemsForEnum<EnumType>() where EnumType : struct
{
    if (!typeof(EnumType).IsEnum) throw new InvalidOperationException("Generic type argument is not a System.Enum");
    var names = Enum.GetNames(typeof(EnumType));

    foreach (var name in names)
    {
        var item = new ListItem();
        var fieldInfo = typeof(EnumType).GetField(name);
        var attribute = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault(x => x is DescriptionAttribute) as DescriptionAttribute;
        if (attribute != null)
        {
            item.Text = attribute.Description;
            item.Value = Enum.Parse(typeof(EnumType), name).ToString();
            yield return item;
        }
    }
}

然后你可以简单地在任何带有描述属性的枚举上调用该方法,并在绑定时使用IEnumerable<ListItem>