2

特定の列挙型のすべての可能な値のリストを提供するコードがあります
。ウェブページのドロップダウンリストにかなり頻繁にバインドしています。
現在、タイプ名をパラメーターとして受け入れるユーザーコントロールを作成しようとしています。
私のサブがタイプパラメータを期待するので、 値リスト

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

ユーザーコントロール宣言で使用される文字列を型に変換しようとしています。問題は、システムタイプでしかできないことです(mscorlibでなくても、少し不器用です)。しかし、私のapp_codeで宣言された列挙型の場合
、aqnが次のような面白いコードで文字列を作成する方法がわかりません(AstroDateは私のクラスの名前です):
"AstroDate、App_Code.rujpwg3d、Version = 0.0.0.0 、Culture=neutral、PublicKeyToken=null」
ですが、gettypeで使用するとエラーになります

お知らせ下さい

ここで編集 は、列挙型のリストを取得しようとするユーザーコントロールのコードです

    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」は、ページ内のユーザー コントロールの宣言で渡される文字列プロパティです。

4

2 に答える 2

1

あなたが正確に何をしたいのか理解できませんでした。だから、私は推測しています:

指定した列挙型に基づいて DrowDownList を作成する UserControl が 1 つあります。しかし、あなたはそれを読み返すのに苦労しました。

私はあなたに役立つかもしれない実用的なサンプルを作成しました:

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

何が起こっているのかわかりませんが、コードの貼り付けに問題があります。だから、それをむき出しにして、誰かが私のためにそれを修正できるなら!

于 2010-06-23T18:01:25.690 に答える
0

コードはこちら

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 は私のシステムの任意の列挙型であり、好きなものを使用できます

試してくれてありがとう

于 2010-11-29T15:49:08.450 に答える