将枚举绑定到下拉列表框并根据值对其排序
介绍 这篇文章是为那些想要将Web/Window窗体中的DropdownListbox控件绑定到枚举数据类型的人准备的。 背景 有时,我们希望将枚举绑定到Dropdownlistbox,而不是从数据库获取数据,然后将其绑定到Dropdownlistbox。这里我解释了如何绑定您在公共类/实用类代码中定义的枚举。 使
用的代码 这真的很简单。让我们看一下下面的代码片段。下面是我的Enum,它定义了PhoneNumberType: 隐藏,复制Code
Public Enum PhoneNumberType As Integer [Select] = -1 Home = 0 Mobile = 1 Work = 2 End Enum
现在,要将这样的枚举绑定到您的DropdownListbox,您所需要做的就是创建任何类型的变量,比如SortedList(of TKeys,TValues)、Dictionary等,然后将该变量分配到您的DropdownListbox的DataSource属性。我使用SortedList进行绑定。 隐藏,收缩,复制Code
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能够通过它的“键”对项目进行排序,我在这里所做的是为“键”,我已经使用了枚举的值,为值,我已经使用了枚举的文本。在此之前,情况正好相反。我已经用枚举的文本作为键和枚举的值作为排序列表的值填充了SortedList。在本例中,SortedList将返回按键排序的列表。但因为我想“选择”选项在顶部与-1的值,我所做的不是定义SortedList(字符串,整型),我已经定义了SortedList(整型,字符串),并填充了所有的Enum值作为键的SortedList和文本作为值的SortedList。 历史 2008年5月12日:初始职位 本文转载于:http://www.diyabc.com/frontweb/news326.html