我正在使用枚举中的设置来填充ASP.NET 4.0中的下拉列表。我遇到的问题是,当我尝试设置除第一项以外的选定值时,它会抛出一个错误,告诉我它不能选择多个选项。
以下是代码示例:
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
尽管以多种方式清除了所选值,但第一项仍然处于选中状态,从而导致上述错误。
其他可能有助于解释我如何使用上述代码的项目:
有什么想法?感谢。
编辑:我错过了上面的(坏内存):直接设置SelectedValue会导致它被忽略。它与ClearSelection或SelectedIndex = 1无关,正如我在上面的第二个子弹中所述。
答案 0 :(得分:0)
我发现了这个问题(我没有提供足够的代码让你自己找到它。)
基本上,我有一周的每一天的下拉列表,上面的ConvertEnumToArray返回的列表项被添加到每个下拉列表中。因此,所有下拉列表中的所选项目都已更改,因为每个下拉列表中都有相同的列表项。当New Listitems解决问题时,将它们添加到下拉列表中。