2013-10-02 38 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返回的列表项被添加到每个下拉列表中。因此,由于每个下拉列表中的相同列表项都会在所有下拉列表中更改选定项目。将它们添加到下拉列表中可以解决问题。