Types 通过GetType获取枚举列表
我的代码给出了任何给定枚举的所有可能值的列表Types 通过GetType获取枚举列表,types,enums,app-code,gettype,Types,Enums,App Code,Gettype,我的代码给出了任何给定枚举的所有可能值的列表 我经常将它绑定到我网页中的下拉列表 现在,我尝试创建一个usercontrol,它接受类型名作为参数,然后调用代码来创建值列表 因为我的sub需要一个类型参数 Shared Function EnumList(ByVal EnumType As Type) As List(Of ListItem) Dim ret As New List(Of ListItem) Dim consts = [Enum].GetValue
我经常将它绑定到我网页中的下拉列表
现在,我尝试创建一个usercontrol,它接受类型名作为参数,然后调用代码来创建值列表
因为我的sub需要一个类型参数
Shared Function EnumList(ByVal EnumType As Type) As List(Of ListItem)
Dim ret As New List(Of ListItem)
Dim consts = [Enum].GetValues(EnumType)
For Each c In consts
ret.Add(New ListItem With {.Text = c.ToString, .Value = c.ToString})
Next
Return ret
End Function
我正在尝试将usercontrols声明中使用的字符串转换为类型。问题是我只能使用系统类型(即使是非mscorlib,也有点笨拙)。但是对于在我的app_代码中声明的enum,我无法找到执行它的方法aqn用一个有趣的代码制作了一些字符串,如下所示(AstroDate是我的类名):
“AstroDate,App_Code.rujpwg3d,版本=0.0.0.0,区域性=中性,PublicKeyToken=null”
但是如果我在gettype中使用它,它会出错 请告知 编辑 下面是usercontrol中试图获取枚举列表的代码
Sub RefillData()
Dim TempValue = Value
MainList.Items.Clear()
MainList.DataSource = EnumList(Type.GetType(EnumType, True, True))
If EmptyText <> "" Then
Dim itm As New ListItem(EmptyText, "")
MainList.Items.Add(itm)
End If
MainList.DataBind()
Value = TempValue
End Sub
Sub RefillData()
Dim TempValue=值
MainList.Items.Clear()
MainList.DataSource=EnumList(Type.GetType(EnumType,True,True))
如果清空文本“”,则
将itm调整为新列表项(EmptyText,“”)
MainList.Items.Add(itm)
如果结束
MainList.DataBind()
值=临时值
端接头
“EnumType”是在页面的usercontrol声明中传递的字符串属性。我很难理解您到底想做什么。所以,我猜: 您有一个UserControl,它根据您提供的枚举类型创建DrowDownList。但是,你很难把它读回来 我创建了一个可能对您有帮助的工作示例:
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1" %>
<%@ Register src="DynamicComboFromEnum.ascx" tagname="DynamicComboFromEnum" tagprefix="uc1" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc1:DynamicComboFromEnum ID="DynamicComboFromEnum1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
结束枚举
公共类WebForm1
继承System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not Page.IsPostBack) Then
DynamicComboFromEnum1.EnumType = GetType(TestEnum)
End If
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Label1.Text = DynamicComboFromEnum1.GetSelectedValue().ToString()
End Sub
末级
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="DynamicComboFromEnum.ascx.vb" Inherits="WebApplication2.DynamicComboFromEnum" %>
<asp:DropDownList ID="MainList" runat="server"></asp:DropDownList>
用户控制:
Public Class DynamicComboFromEnum
Inherits System.Web.UI.UserControl
Public Property EnumType() As Type
Get
Return ViewState("EnumType")
End Get
Set(ByVal value As Type)
ViewState("EnumType") = value
End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not Page.IsPostBack) Then
RefillData()
End If
End Sub
Sub RefillData()
MainList.Items.Clear()
MainList.DataSource = EnumList(EnumType)
MainList.DataBind()
End Sub
Private Function EnumList(ByVal type As Type) As Object
Dim Names As String() = [Enum].GetNames(type)
Return Names
End Function
Public Function GetSelectedValue() As Object
Return [Enum].Parse(EnumType, MainList.SelectedValue)
End Function
末级
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="DynamicComboFromEnum.ascx.vb" Inherits="WebApplication2.DynamicComboFromEnum" %>
<asp:DropDownList ID="MainList" runat="server"></asp:DropDownList>
我不确定发生了什么,但粘贴代码时遇到了问题。所以,如果有人能帮我把它修好的话,请把它拿出来 代码在这里
Dim ax = Reflection.Assembly.Load(ObjectType.Account.GetType.Assembly.FullName)
Dim tx = ax.GetType(EnumType)
Dim enumers = [Enum].GetNames(tx)
System.Array.Sort(enumers)
e.Result = enumers
objecttype.account只是我系统中的任何枚举,你可以使用任何你想要的
谢谢大家的尝试你能发布你实际面临问题的代码吗?当然可以,我把它添加到了原始帖子的末尾非常感谢你4看一看谢谢decyclone。你真的花了很多时间。现在解释起来会容易一点。;-)假设我们的系统中有2个或10个或更多不同的枚举。你能准确地在下拉列表中声明我们想要列出的枚举吗?这就是我想要实现的。万分感谢!!!!所以,您的意思是希望从标记中指定枚举类型(在aspx文件中,而不是在代码隐藏文件中),对吗?