سؤال

لدي رمز يعطي قائمة بجميع القيم الممكنة لأي تعداد معين
لقد ربطت ذلك في كثير من الأحيان إلى قوائم القائمة المنسدلة في صفحات الويب الخاصة بي
أنا الآن أحاول إنشاء UserControl الذي يقبل اسم النوع كمعلمة ، والتي بدورها تستدعي الرمز لإنشاء قائمة القيمة
كما يتوقع sub بلدي معلمة نوع

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 إلى نوع. المشكلة هي أنه لا يمكنني فعل ذلك إلا مع أنواع النظام (حتى غير mscorlib ، بشكل خرقاء بعض الشيء). لكن بالنسبة إلى التعدادات التي تم إعلانها في app_code الخاص بي ، لا يمكنني معرفة طريقة القيام بذلك
تصنع AQN بعض السلسلة مع رمز مضحك مثل هذا (Astrodate هو اسم صفي):
"Astrodate ، app_code.rujpwg3d ، الإصدار = 0.0.0.0 ، الثقافة = محايد ، 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" هي خاصية سلسلة تم تمريرها في Declartaion من 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 هو مجرد أي تعداد في نظامي ، يمكنك استخدام أيهما تريد

شكرا للجميع على المحاولة

نصائح أخرى

واجهت صعوبات في فهم ما تريد القيام به بالضبط. لذلك ، أنا أخمن:

لديك USERCONTROL واحد ينشئ قائمة drowdown على أساس نوع التعداد الذي تقدمه. ولكن ، واجهت صعوبات في قراءتها.

لقد قمت بإنشاء عينة عمل قد تكون مفيدة لك:

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

لست متأكدًا مما يجري ولكنني أواجه مشاكل في لصق الكود. لذا ، من فضلك عارية معها وإذا كان بإمكان شخص ما إصلاحه لي!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top