将枚举绑定到下拉列表框并按值排序





3.00/5 (3投票s)
一篇文章,介绍如何使用 SortedList 将枚举绑定到 DropDownListbox,并按值而不是键进行排序。
引言
这篇文章适用于想要将 Enum
数据类型绑定到 Web/Windows Form 中的 DropdownListbox
控件的用户。
背景
有时,我们希望将 Enum
绑定到 Dropdownlistbox
,而不是从数据库中获取数据,然后将其绑定到 Dropdownlistbox
。 在这里我解释如何绑定你在通用类/实用程序类代码中定义的 Enum
。
Using the Code
这非常简单。 让我们看一下下面的代码片段。 以下是定义 PhoneNumberType
的 Enum
Public Enum PhoneNumberType As Integer
[Select] = -1
Home = 0
Mobile = 1
Work = 2
End Enum
现在,要将任何像这样的 enum
绑定到你的 DropdownListbox
,你所需要做的就是创建一个任何类型的变量,例如 SortedList(Of TKeys,TValues)
、Dictionary
等,然后将该变量分配给 dropdownListbox
的 DataSource
属性。 我使用了 SortedList
进行绑定。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) _
Handles MyBase.Load, Me.Load
If (Not Me.IsPostBack) Then
Me._presenter.OnViewInitialized()
Dim phoneTypes As SortedList(Of Integer, String)
phoneTypes = GetEnumDataSource(Of PhoneNumberType)()
If Not (phoneTypes Is Nothing) Then
drplstPhoneType.DataSource = phoneTypes
drplstPhoneType.DataValueField = "Key"
drplstPhoneType.DataTextField = "Value"
drplstPhoneType.DataBind()
End If
End If
End Sub
Public Function GetEnumDataSource(Of T)() As SortedList(Of Integer, String)
Dim myEnumType As Type = GetType(T)
Dim returnCollection As SortedList(Of Integer, String) = _
New SortedList(Of Integer, String)
Try
If myEnumType.BaseType Is GetType([Enum]) Then
Dim enumNames() As String = [Enum].GetNames(myEnumType)
For i As Integer = 0 To (enumNames.Length - 1)
returnCollection.Add(Convert.ToInt32([Enum].Parse_
(myEnumType, enumNames(i))), enumNames(i))
Next
End If
Catch ex As Exception
Return Nothing
End Try
Return returnCollection
End Function
关注点
我在这里所做的是用我的 EnumData
类型的数值和文本填充了 SortedList
。 现在,如果你仔细观察代码片段,我解决了另一个问题,即按条目的值对 DropdownListbox
进行排序。
由于 SortedList
能够按其“键”对条目进行排序,因此我在这里所做的是,对于“键”,我使用了 Enum
的值,对于值,我使用了 Enum
的文本。 以前的情况正好相反。 我用 Enum
的 Text
作为键,用 Enum
的值作为 Sorted List 的值填充了 SortedList
。 在这种情况下,SortedList
将按其键对 List
进行排序。 但是,由于我希望“选择”选项位于顶部,值为 -1
,因此我没有定义 SortedList(Of String, Integer)
,而是定义了 SortedList(Of Integer, String)
,并将所有 Enum
的值作为 SortedList
的键,将 Text
作为 SortedList
的值填充。
历史
- 2008年5月12日:初始发布