2010-06-20 8 views
2

을 통해 열거 목록을 가져
이제 형의 이름을 받아들이는 UserControl을 만들려고 노력 메신저 내 서브가 형식 매개 변수를 유형에 declration을 된 UserControls에 사용되는 문자열을 설정하려고나는 내 웹 페이지에 dropdownlists에 꽤 자주 바인딩 <br> 주어진 열거에 대한 모든 가능한 값의 목록을 제공 코드가 GetType을

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, 버전 = 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 선언에 전달 된 문자열 속성입니다.

+0

시도에 대한

감사를 원하는 중 사용할 수 있습니다, 내 시스템에 그냥 열거입니까? – decyclone

+0

확실한 decyclone, 나는 원래 게시물의 끝에 그것을 추가했다 u를 대단히 감사 4 감사합니다. –

+0

MainList는 드롭 다운리스트 –

답변

0

을 heres 코드

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 

개체 유형.계정은 u는 u는 모두 당신이있는 당신이 실제로 문제를 직면하고있는 코드를 게시 할 수

1

정확하게하고 싶었던 것을 이해하는 데 어려움이있었습니다. 따라서, 추측을하고 있습니다 :

사용자가 제공하는 Enum Type을 기반으로 DrowDownList를 생성하는 하나의 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 

종료 열거

공공 등급을 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

감사합니다 decyclone입니다. 정말 시간이 걸렸습니다. 이제는 설명하기가 조금 더 쉬울 것입니다. ;-) 우리 시스템에 2 개 또는 10 개 이상의 서로 다른 enum이 있다고 상상해보십시오. 에서 드롭 다운에 나열 할 열거 형을 정확하게 선언 할 수 있습니까? 그게 뭔데 성취하려고하는지. 대단히 감사합니다!!!! –

+0

그래서 마크 업에서 enum 유형을 지정하려는 것입니다 (코드 숨김 파일이 아닌 aspx 파일에서), 맞습니까? – decyclone

+0

이 맞습니다. 감사. –