我有一个要求,当用户点击图像时,列表应显示复选框,并且DB和用户中存在的所有类别都应该能够选中复选框。如何使用asp:repeater控件实现这一目标? caegory是一个枚举类型,可以有n个值。在转发器中,我添加了一个复选框和一个标签;标签应显示类别文本。
答案 0 :(得分:0)
首先,您应该将[Description]属性添加到Enum中的每个值。这允许您为每个值设置适当的描述性文本。此属性位于System.ComponentModel中,这是一个示例: -
public enum CalendarShowAsEnum
{
[Description("None")]
None = 10,
[Description("Busy")]
Busy = 20,
[Description("Out Of Office")]
OutOfOffice = 30,
[Description("On Holiday")]
OnHoliday = 40
}
然后你需要2个功能: -
将Enum类型和ListBox / DropDown作为参数的一个函数,并将每个枚举的条目添加到列表中
帮助函数,它将枚举转换为您给出的描述性标题(上例)
List函数可能如下所示(所有这些都来自我工作的项目): -
public static void BindNamedEnumList(ListControl list,
Type enumerationType)
{
list.Items.Clear();
Array array = Enum.GetValues(enumerationType);
ListItem item;
string name;
var enumerator = array.GetEnumerator();
if (enumerator != null)
{
while (enumerator.MoveNext())
{
Enum value = enumerator.Current as Enum;
name = EnumHelper.GetEnumName(value);
item = new ListItem(name);
item.Value = Convert.ToInt32(value).ToString();
list.Items.Add(item);
}
}
}
此函数采用Type和ListControl(ListBox和DropDownList都继承自)。 Type是要添加到列表的枚举的.GetType()。请注意,它不选择任何值,并且 依赖于具有定义的整数值的每个枚举值。后一部分将帮助您选择单个项目。
注意循环调用EnumHelper.GetEnumName(value)
- 这是使用我在开头提到的Description属性的辅助函数。此功能如下所示: -
public static string GetEnumName(object value)
{
string retVal = string.Empty;
try
{
FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
DescriptionAttribute[] attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
retVal = ((attributes.Length != 0) ? attributes[0].Description : value.ToString());
}
catch (System.NullReferenceException)
{
}
finally
{
if (string.IsNullOrEmpty(retVal))
{
retVal = "Unknown";
}
}
return retVal;
}
它使用反射,因此您需要为System.Reflection添加Imports
要使用list函数将一组Enum值绑定到列表,只需调用
即可 {HelperClass}.BindNamedEnumList(myListBox, typeof({MyEnumType})