[英]Populating dropdown list with enum using reflection
我正在填充一個頁面,其中的控件使用反射讀取類的屬性。 如果屬性類型是'String'
我將添加一個文本框。 如果屬性類型是枚舉,我將添加一個下拉列表。 現在我必須使用枚舉填充下拉選項。 如何才能做到這一點?
枚舉定義類( Assignment
)和用於使用控件填充頁面的類( classOne
)都在同一個Namespace(MySolution.Data)
。 當屬性名稱為'SkillLevel'時循環遍歷classOne屬性,我將不得不轉到賦值類獲取枚舉SkillLevelEnum
的成員並填充下拉列表。
其他下拉菜單也需要做同樣的事情。
我的代碼:
namespace MySolution.Data
{
public class classOne : MyAdapter
{
private string _Model;
public string Model
{
get { return _Model; }
set { _Model = value; }
}
private Assignement.SkillLevelEnum _SkillLevel;
public Assignement.SkillLevelEnum SkillLevel
{
get { return _SkillLevel; }
set { _SkillLevel = value; }
}
private Assignement.MinimalSkillsEnum _MinimalSkill;
public Assignement.MinimalSkillsEnum MinimalSkill
{
get { return _MinimalSkill; }
set { _MinimalSkill = value; }
}
public Assignemen.WorkLoadEnum WorkLoad
{
get { return _WorkLoad; }
set { _WorkLoad = value; }
}
}
public class Assignement : MyAdapter
{
#region Enumerations
public enum SkillLevelEnum
{
LowerSkills = 0, HighestSkills = 1, Any = 2
}
public enum MinimalSkillsEnum
{
Accountable = 0,
Responsible = 1,
Expert = 2,
Senior = 3,
Medium = 4,
Junior = 5
}
public enum WorkLoadEnum
{
LessBusy = 0, MostBusy = 1, Any = 2
}
#endregion
}
}
謝謝
編輯:
我不想硬編碼任何屬性名稱。 我循環遍歷以下屬性。
properties = Utility.GetAllPropertyForClass(“className”)
Panel panel = new Panel();
panelMe.Controls.Add(面板);
foreach(屬性中的PropertyInfo屬性){
if (!property.PropertyType.IsEnum)
{
TextBox txt = new TextBox();
txt.ID = "txt" + i.ToString();
panel.Controls.Add(txt);
}
else
{
DropDownList ddl = new DropDownList();
ddl.ID = "ddl" + i.ToString();
// Here based on the property.name i need to get the enum members which is defined in a different class using reflection
panel.Controls.Add(ddl);
}
panel.Controls.Add(new LiteralControl("<br/>"));
i++;
}
以下是如何使用下拉列表綁定枚舉的示例示例
public enum ProgrammingLanguage
{
CSharp,
VB,
JAVA
}
foreach (ProgrammingLanguage enmLnaguage in Enum.GetValues(typeof(ProgrammingLanguage)))
{
cboProgrammingLanguage.Items.Add(new ListItem(enmLnaguage.ToString(), Convert.ToInt32( enmLnaguage).ToString()));
}
嘗試
var enumvalues=Enum.GetValues(typeof(MinimalSkillsEnum));
var enumNames=Enum.GetNames(typeof(MinimalSkillsEnum));
enumvalues將是一個數組,enumNames是一個字符串數組。
如果您的枚舉是MinimalSkillsEnum,這應該工作:
string[] enumOptions = Enum.GetNames(typeof(MinimalSkillsEnum));
您可以通過GetNames函數訪問Enum的標簽
List<string> options = Enum.GetName(typeof(MyEnum));
然后,您可以直接將其用作下拉列表的數據源
MyDropDown.DataSource = options;
MyDropDown.DataBind();
將枚舉綁定到下拉列表檢查如何將Enum綁定到ASP.NET中的DropDownList控件?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.