2015-02-24 3 views
-1

У меня есть требование, когда пользователь нажимает на изображение, список должен отображаться с флажками и всеми категориями, присутствующими в БД, и пользователь должен иметь возможность выбирать флажки. Как это можно достичь с помощью asp: управления ретрансляторами? caegory - тип перечисления и может иметь n число значений. В репитере я добавил флажок и ярлык; на этикетке должен отображаться текст категории.Список повторителей привязки с перечислением

+0

Итак - вы просто хотите, чтобы отобразить список флажков, каждый из которых представляет собой значение перечисления? Я могу привести пример на C#, если это поможет, это может быть сделано, извините, что я не делал VB.NET в течение нескольких лет. – sh1rts

+0

, который должен помочь. Я буду инвертировать код t VB.NET –

ответ

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 в качестве параметров, и добавляет запись для каждого 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})