2015-02-24 28 views
-1

我有一個要求,當用戶單擊圖像時,應該顯示一個列表,並帶有複選框,並且數據庫中存在的所有類別和用戶都應該能夠選擇複選框。如何使用asp:repeater控件實現這一點?該caegory是一個枚舉類型,可以有n個值。在repeater中,我添加了一個複選框和一個標籤;標籤應顯示類別文本。使用枚舉綁定中繼器列表

+0

所以 - 你只是想顯示一個複選框列表,每其中一個代表枚舉值?我可以在C#中提供一個例子,如果這會有所幫助的話,它肯定可以完成,對不起,我幾年來沒有做過任何VB.NET。 – sh1rts 2015-02-24 12:09:13

+0

應該有所幫助。我將顛倒VB.NET代碼 – 2015-02-25 13:38:30

回答

0

首先,您應該爲[Enum]中的每個值添加[Description]屬性。這使您可以爲每個值設置適當的描述性文本。此屬性是在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個功能: -

  • 一個函數,它接受一個枚舉類型和一個列表框/下拉作爲參數,並會爲每個枚舉一個進入名單

  • 一個輔助函數的枚舉轉換成你給他們的描述性標題(上面的例子)

列表功能可能如下(所有這一切都是從一個項目我從事拍攝): -

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); 
      } 
     } 
    } 

該函數有一個類型和一個列表控件(來自繼承其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

要使用列表功能可將枚舉值綁定到列表中,只需撥打

{HelperClass}.BindNamedEnumList(myListBox, typeof({MyEnumType})