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.

Était-ce utile?

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top