65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (3投票s)

2008年5月12日

CPOL

2分钟阅读

viewsIcon

40105

一篇文章,介绍如何使用 SortedList 将枚举绑定到 DropDownListbox,并按值而不是键进行排序。

引言

这篇文章适用于想要将 Enum 数据类型绑定到 Web/Windows Form 中的 DropdownListbox 控件的用户。

背景

有时,我们希望将 Enum 绑定到 Dropdownlistbox,而不是从数据库中获取数据,然后将其绑定到 Dropdownlistbox。 在这里我解释如何绑定你在通用类/实用程序类代码中定义的 Enum

Using the Code

这非常简单。 让我们看一下下面的代码片段。 以下是定义 PhoneNumberTypeEnum

Public Enum PhoneNumberType As Integer
    [Select] = -1
    Home = 0
    Mobile = 1
    Work = 2
End Enum

现在,要将任何像这样的 enum 绑定到你的 DropdownListbox,你所需要做的就是创建一个任何类型的变量,例如 SortedList(Of TKeys,TValues)Dictionary 等,然后将该变量分配给 dropdownListboxDataSource 属性。 我使用了 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 的文本。 以前的情况正好相反。 我用 EnumText 作为键,用 Enum 的值作为 Sorted List 的值填充了 SortedList。 在这种情况下,SortedList 将按其键对 List 进行排序。 但是,由于我希望“选择”选项位于顶部,值为 -1,因此我没有定义 SortedList(Of String, Integer),而是定义了 SortedList(Of Integer, String),并将所有 Enum 的值作为 SortedList 的键,将 Text 作为 SortedList 的值填充。

历史

  • 2008年5月12日:初始发布
© . All rights reserved.