2013-10-02 40 views
0

我正在使用枚舉中的設置來填充ASP.NET 4.0中的下拉列表。我遇到的問題是,當我嘗試設置除第一項以外的選定值時,它會引發錯誤,告訴我它不能選擇多個選項。ASP.NET DropDownList枚舉的選定值

下面的代碼的示例:

Public Shared Function ConvertEnumToArray(ByVal enumType As System.Type, _ 
     Optional ByVal DefaultValue As String = "nodefault", _ 
     Optional ByVal PromptValue As String = "", _ 
     Optional ByVal PromptText As String = "") As ListItem() 

     Dim itemSelected As Boolean = False 
     Dim i As Int32 = 0 

     If Not enumType.IsEnum Then 
      Throw New Exception(String.Format("Type {0} is not an enumeration.", enumType.Name)) 
     End If 

     'Dim itemValues() As Array = [Enum].GetValues(enumType) 
     Dim fields As FieldInfo() = enumType.GetFields() 
     Dim itemNames() As String = [Enum].GetNames(enumType) 

     Dim arr(itemNames.Length + 1) As ListItem 

     For Each field As FieldInfo In fields 
      If Not field.Name.Equals("value__") Then 
       Dim item As New ListItem(field.Name, field.GetRawConstantValue().ToString()) 
       If item.Value = DefaultValue And DefaultValue <> "nodefault" Then 
        item.Selected = True 
        itemSelected = True 
       End If 
       arr(i) = item 
       i = i + 1 
      End If 
     Next 

     If PromptText <> "" Then 
      Dim item As New ListItem(PromptText, PromptValue) 
      If Not itemSelected Then 
       item.Selected = True 
      End If 
      arr(i) = item 
     End If 

     Return arr 

    End Function 

    Dim arrExtraChargesOptions() As ListItem 
    arrExtraChargesOptions = Enumerations.ConvertEnumToArray(GetType(Enumerations.MoneyRoomCourierExtraChargesOptions)) 

    For Each li As ListItem In arrExtraChargesOptions 
     'since arrays double in capacity to store data, there may be nulls 
     If Not li Is Nothing Then 
      Me.drpMondayExtraCharges.Items.Add(li) 
     End If 
    Next 

    Me.drpMondayExtraCharges.ClearSelection() 
    Me.drpMondayExtraCharges.SelectedIndex = -1 
    Me.drpMondayExtraCharges.Items.FindByValue(Courier.MondayExtraCharge.ToString()).Selected = True 

儘管以多種方式清除選擇的值,第一個項目保持選定導致誤差,如上所述。

其他項目,這可能有助於解釋我如何結束了與上面的代碼:

  • 我的函數的返回類型設置爲一個數組,因爲這就是參數類型的下拉列表中的AddRange功能。項目期望,但是當我使用該方法時,由於數組中的NULL而導致異常。
  • 在添加ClearSelection()和SelectedIndex = -1行之前,我通過設置選定值(通過上面的FindByValue或直接設置SelectedValue)導致我所需的選定值被忽略。

有什麼想法?謝謝。

編輯:我錯過了上面(壞記憶):直接設置SelectedValue結果是什麼結果被忽略。它與ClearSelection或SelectedIndex = 1無關,正如我在上面第二個項目中所述。

+0

稍微改變一下,我還會在添加列表項之前調用List上的Clear。即Me.drpMondayExtraCharges.Items.Clear() –

+0

這是在頁面的初始加載,所以項目列表清除,直到我添加上述項目。 –

+0

Gotcha我猜這是我爲避免重複列表項目而習慣的那些事情之一。我傾向於是一個腰帶和吊帶類型的傢伙。 –

回答

0

我發現這個問題(我沒有提供足夠的代碼讓你自己找)。

基本上,我有一個每週的下拉列表,上面的ConvertEnumToArray返回的列表項被添加到每個下拉列表中。因此,由於每個下拉列表中的相同列表項都會在所有下拉列表中更改選定項目。將它們添加到下拉列表中可以解決問題。