我正在填充一个页面,其中的控件使用反射读取类的属性。如果属性类型为'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++;
}
答案 0 :(得分:4)
以下是如何将枚举与下拉列表
绑定的示例示例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()));
}
要查看此访问的Vb.Net代码link.
答案 1 :(得分:2)
尝试
var enumvalues=Enum.GetValues(typeof(MinimalSkillsEnum));
var enumNames=Enum.GetNames(typeof(MinimalSkillsEnum));
enumvalues将是一个数组,enumNames是一个字符串数组。
答案 2 :(得分:1)
如果你的枚举是MinimalSkillsEnum,这应该有效:
string[] enumOptions = Enum.GetNames(typeof(MinimalSkillsEnum));
答案 3 :(得分:0)
您可以通过GetNames函数
访问Enum的标签List<string> options = Enum.GetName(typeof(MyEnum));
然后,您可以直接将其用作下拉列表的数据源
MyDropDown.DataSource = options;
MyDropDown.DataBind();
答案 4 :(得分:0)