1

我面临一个问题。我在我的应用程序中设置了一些枚举。喜欢

public enum EnmSection
{
    Section1,
    Section2,
    Section3
}

public enum Section1
{
    TestA,
    TestB
}

public enum Section2
{
    Test1,
    Test2
}

EnmSection是主枚举,其中包含在其下方声明的其他枚举(作为字符串)。现在我必须填写EnmSection下拉列表中的值。我已经完成了。像这样...

drpSectionType.DataSource = Enum.GetNames(typeof(EnmSection));
drpSectionType.DataBind();

现在我的下拉列表有值:Section1,Section2,Section3

问题是:

我还有另一个下拉菜单drpSubSection。现在我想填充这个下拉列表中我在drpSectionType.

例如,如果我在 drpSectionType 中选择了 Section1,则 drpSubsection 应该包含该值 TestA,TestB。像这样:

protected void drpSectionType_SelectedIndexChanged(object sender, EventArgs e)
{
    string strType = drpSectionType.SelectedValue;
    drpSubsection.DataSource = Enum.GetNames(typeof());
    drpSubsection.DataBind();
}

这里typeof()期待枚举。但我将选定的值作为字符串。我怎样才能实现这个功能。

谢谢

4

4 回答 4

3

如果您引用的程序集包含另一个名为 的枚举,该Section1怎么办?

你只需要尝试所有你关心的枚举,一次一个,看看哪个有效。您可能想要使用Enum.TryParse.

于 2012-05-24T12:33:13.397 回答
0
drpSubsection.DataSource = Enum.GetNames(Type.GetType("Your.Namespace." + strType));

如果枚举在另一个程序集中(即它们不在 mscorlib 或当前程序集中),您需要提供AssemblyQualifiedName. 最简单的方法是查看typeof(Section1).AssemblyQualifiedName,然后修改您的代码以包含所有必要的部分。完成后,代码将如下所示:

drpSubsection.DataSource = Enum.GetNames(Type.GetType("Your.Namespace." + strType + ", MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089"));
于 2012-05-24T12:50:31.383 回答
0

像这样的东西可能会起作用,但你必须做一些异常处理:

protected void drpSectionType_SelectedIndexChanged(object sender, EventArgs e) 
{    
  string strType = drpSectionType.SelectedValue;    
  EnmSection section = (EnmSection)Enum.Parse(typeof(EnmSection), strType);
  drpSubsection.DataSource = Enum.GetNames(typeof(section));     
  drpSubsection.DataBind();

 }
于 2012-05-24T12:50:49.940 回答
0

这可能有点过头了,但如果您将 IEnumItem 的绑定数组绑定到下拉列表并将其设置为显示其显示文本,它将起作用。

public interface IEnumBase
{
  IEnumItem[] Items { get; }
}

public interface IEnumItem : IEnumBase
{
  string DisplayText { get; }
}

public class EnumItem : IEnumItem
{
  public string DisplayText { get; set; }
  public IEnumItem[] Items { get; set; }
}

public class EnmSections : IEnumBase
{
  public IEnumItem[] Items { get; private set; }

  public EnmSections()
  {
    Items = new IEnumItem[]
    {
      new EnumItem
      {
        DisplayText = "Section1",
        Items = new IEnumItem[]
        {
          new EnumItem { DisplayText = "TestA" },
          new EnumItem { DisplayText = "TestB" }
        }
      },
      new EnumItem
      {
        DisplayText = "Section2",
        Items = new IEnumItem[]
        {
          new EnumItem { DisplayText = "Test1" },
          new EnumItem { DisplayText = "Test2" }
        }
      }
    };
  }
}
于 2012-05-24T13:51:50.583 回答