У меня есть требование, когда пользователь нажимает на изображение, список должен отображаться с флажками и всеми категориями, присутствующими в БД, и пользователь должен иметь возможность выбирать флажки. Как это можно достичь с помощью asp: управления ретрансляторами? caegory - тип перечисления и может иметь n число значений. В репитере я добавил флажок и ярлык; на этикетке должен отображаться текст категории.Список повторителей привязки с перечислением
ответ
Для начала вы должны добавить атрибут [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 в качестве параметров, и добавляет запись для каждого Enum в список
вспомогательная функция, которая преобразует перечисление в описательное название вы дали им (пример выше)
Функция Список может выглядеть следующим образом (все это взято из проекта я работал): -
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);
}
}
}
Эта функция принимает тип и ListControl (который ListBox и DropDownList как наследовать от). Тип - это .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
Для использования функции списка, чтобы связать набор значений Enum к списку, просто позвоните
{HelperClass}.BindNamedEnumList(myListBox, typeof({MyEnumType})
Итак - вы просто хотите, чтобы отобразить список флажков, каждый из которых представляет собой значение перечисления? Я могу привести пример на C#, если это поможет, это может быть сделано, извините, что я не делал VB.NET в течение нескольких лет. – sh1rts
, который должен помочь. Я буду инвертировать код t VB.NET –