Получить Enum List через GetType - PullRequest
2 голосов
/ 20 июня 2010

У меня есть код, который дает список всех возможных значений для любого данного перечисления
я довольно часто связывал его с выпадающими списками на своих веб-страницах
теперь я пытаюсь создать пользовательский контроль, который принимает имя типа в качестве параметра,который, в свою очередь, вызывает код для создания списка значений
, поскольку моя подпрограмма ожидает параметр типа

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_code, я не могу понять, как это сделать
aqn создает строку со смешным кодом, подобным этому (AstroDate - это имя моего класса):
"AstroDate, App_Code.rujpwg3d, Версия = 0.0.0.0, Культура = нейтральная, PublicKeyToken = null "
, но если я использую его в gettype, то это ошибки

, пожалуйста, сообщите

Редактировать Вот код в usercontrol, пытающийся получить список Enum

    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

«EnumType» - это строковое свойство, переданное в объявлении usercontrol на странице.

Ответы [ 2 ]

1 голос
/ 23 июня 2010

Мне было трудно понять, что именно вы хотели сделать.Итак, я предполагаю:

У вас есть один UserControl, который создает DrowDownList на основе предоставленного вами типа Enum.Но у вас возникли трудности с его чтением.

Я создал рабочий пример, который может быть вам полезен:

<%@ 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>

Код:

Public Enum TestEnum
Value1
Value2
Value3
Value4
Value5

End Enum

Открытый класс 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

Конечный класс

Элемент управления пользователя:

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>

Я не уверен, что происходит, но у меня проблемы с вставкой кода.Поэтому, пожалуйста, смирись с этим, и если бы кто-то мог починить это для меня!

0 голосов
/ 29 ноября 2010

вот код

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 - это просто любое перечисление в моей системе, вы можете использовать все, что захотите

спасибо всем за попытку

...