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無關,正如我在上面第二個項目中所述。
稍微改變一下,我還會在添加列表項之前調用List上的Clear。即Me.drpMondayExtraCharges.Items.Clear() –
這是在頁面的初始加載,所以項目列表清除,直到我添加上述項目。 –
Gotcha我猜這是我爲避免重複列表項目而習慣的那些事情之一。我傾向於是一個腰帶和吊帶類型的傢伙。 –