getType経由で列挙リストを取得します
質問
特定の列挙のすべての可能な値のリストを提供するコードがあります
私はそれをかなり頻繁に私のウェブページにドロップダウンリストに縛り付けます
今、私はタイプ名をパラメーターとして受け入れるusercontrolを作成しようとしています。これにより、コードを呼び出して値リストを作成します。
私のサブがタイプパラメーターを期待しているように
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 decluationで使用されている文字列を型に変えようとしています。問題は、システムタイプでのみ行うことができることです(非Mscorlibでさえ、少し不器用に)。しかし、私のapp_codeで宣言された列挙の場合、私はそれを行う方法を理解できません
AQNは、このような面白いコードで文字列を作成します(Astrodateは私のクラスの名前です):
「Astrodate、app_code.rujpwg3d、version = 0.0.0.0、culture = neutral、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
「Enumtype」は、ページのUserControlの脱線で渡された文字列プロパティです。
解決 2
ここにコードがあります
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は私のシステムの任意の列挙です。
試してくれてありがとう
他のヒント
私はあなたが正確にやりたいことを理解するのに苦労しました。だから、私は推測をしている:
あなたが提供する列挙型に基づいてドラウダウンリストを作成する1つのusercontrolがあります。しかし、あなたはそれを読むのに苦労しました。
私はあなたに役立つかもしれない作業サンプルを作成しました:
<%@ 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
エンド列挙
public class 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>
何が起こっているのかわかりませんが、コードを貼り付けるのに問題があります。だから、それをむき出しにしてください、そして誰かが私のためにそれを修正することができれば!