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か?

気になるすべての列挙型を一度に 1 つずつ試して、どれが機能するかを確認するだけです。を使用したいと思うでしょうEnum.TryParse

于 2012-05-24T12:33:13.397 に答える
0

This might be a bit over the top but it would work if you bind bind Arrays of IEnumItem to your drop down and set it up to show their display text.

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 に答える
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 に答える