Obtenez Enum Liste par GetType
Question
J'ai un code qui donne une liste de toutes les valeurs possibles pour toute donnée ENUM
i enveloppèrent assez souvent à DropDownLists dans mes pages web
maintenant im essayant de faire un usercontrol qui accepte le nom du type comme paramètre, ce qui appelle le code pour créer la liste de valeurs
comme mon sous attend un paramètre de type
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
im essayant de transformer la chaîne utilisée dans le usercontrols declration dans un type. le problème est que je ne peux le faire avec des types de système (même non-mscorlib, un peu maladroitement). mais pour les énumérations déclarées dans mon App_Code, je ne peux pas comprendre la façon de le faire
le NAQ fait une chaîne avec un code drôle comme celui-ci (AstroDate est le nom de ma classe):
"AstroDate, App_Code.rujpwg3d, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null"
mais si je l'utilise dans le gettype, il erreurs
S'il vous plaît conseiller
Modifier Voici le code dans le usercontrol tente d'obtenir une liste des 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" est une propriété de chaîne passée dans la declartaion du usercontrol dans la page.
La solution 2
Heres le code
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 est juste une ENUM dans mon système, u peut utiliser selon u want
Merci tout pour essayer
Autres conseils
J'ai eu du mal à comprendre ce que vous vouliez faire exactement. Donc, je prends une supposition:
Vous avez un UserControl qui crée une DrowDownList en fonction du type Enum que vous fournissez. Mais, vous aviez des difficultés en les lisant.
Je créé un échantillon de travail qui pourrait vous être utile:
<%@ 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>
Code de derrière:
Public Enum TestEnum
Value1
Value2
Value3
Value4
Value5
End Enum
Classe publique WebForm1 Hérite 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
End Class
Contrôle de l'utilisateur:
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
End Class
<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="DynamicComboFromEnum.ascx.vb" Inherits="WebApplication2.DynamicComboFromEnum" %>
<asp:DropDownList ID="MainList" runat="server"></asp:DropDownList>
Je ne sais pas ce qui se passe mais je rencontre des problèmes coller le code. Alors, s'il vous plaît nu avec elle et si quelqu'un pouvait le réparer pour moi!