2009-05-09 3 views
1

드롭 다운 (asp : DropDownList) 컨트롤이있는 ASP.NET 페이지가 있습니다. 상기 ENUM 값 (A는 B가 C 물론 문자열로 표시) 중 하나를 사용하여 ListItem : 또한 정의ASP.NET의 드롭 다운 (콤보 상자) 목록에 열거 형 값 매핑

Public Enum myEnumType As Integer 
    A 
    B 
    C 
End Enum 

는 I 각 ASP의 "값"속성을 정의 할 ENUM있다. 또한 각각의 "텍스트"값을 관련이없는 문자열 (예 : "개", "고양이", "개미")로 지정하려고합니다.

나는이 구문을 사용하고 싶습니다 :

<asp:DropDownList ID="myCombo" runat="server"> 
    <asp:ListItem Text="cat" Value="<%= myEnumType.A.toString() %>" /> 
    <asp:ListItem Text="dog" Value="<%= myEnumType.B.toString() %>" /> 
    <asp:ListItem Text="ant" Value="<%= myEnumType.C.toString() %>" /> 
</asp:DropDownList> 

그러나 <퍼센트 =를 사용하여 컨트롤의이 유형에서는 유효하지 않습니다.

은 어떻게 선언 ASP.NET에서이 작업을 수행 할 수 있습니다

+0

나는 값이 변경 될 때 내가 분석 된 열거와 "케이스를 선택"문을 사용할 수 있습니다 열거를 사용합니다. 값이 문자열이면 코드에서 일치하는 문자열을 가져야합니다. 나는 그 값이 강하게 타입이 아니라는 점을 좋아하지 않는다. –

답변

1

MathewMartin의 답안 작업은 실제로 비효율적 인 것처럼 보입니다. 이것이 더 나은/깨끗한 접근 방식이 아니겠습니까?

string[] names = Enum.GetNames(typeof(MyFavoriteEnum)); 
int[] values = (int[])Enum.GetValues(typeof(MyFavoriteEnum)); 
for(int i =0; i<names.Length;i++){ 
    dropDown.Items.Add(
     new ListItem(
     names[i], 
     values[i].ToString() 
     ) 
    ); 
} 
1

를 (각 항목을 작성하는 코드 숨김하지) 코드는 훨씬 이해가되지 않습니다. 이 경우 Enum을 왜 사용합니까? 상수를 사용하는 것과 같습니다. 하드 코딩 값으로 벗어날 수있는 것처럼 보입니다.

<asp:DropDownList ID="myCombo" runat="server"> 
    <asp:ListItem Text="cat" Value="A" /> 
    <asp:ListItem Text="dog" Value="B" /> 
    <asp:ListItem Text="ant" Value="C" /> 
</asp:DropDownList> 
+0

값이 바뀔 때 구문 분석 된 열거 형과 함께 "select case"문을 사용할 수 있도록 열거 형을 사용한다. 값이 문자열이면 코드에서 일치하는 문자열을 가져야합니다. 나는 그 값이 강하게 타입이 아니라는 사실을 좋아하지 않는다. –

0

왜 데이터 바인딩을 사용하지 않습니까?

enum MyFavoriteEnum { A=1, B=2, C=3 } 
for(int i =0; i<Enum.GetNames(typeof(MyFavoriteEnum)).Length;i++) 
{ 
    ListItem li = new ListItem(
     Enum.GetNames(typeof(MyFavoriteEnum))[i], 
     ((int)Enum.GetValues(typeof(MyFavoriteEnum)).GetValue(i)).ToString() 
     ); 
    dropDown.Items.Add(li); 
} 
// Edited to make it actually work 
+0

오, 이런, 엉망이 뭐니? –

1
foreach(var item in Enum.GetValues(typeof(MyEnum))) 
{ 
    lbEnum.Items.Add(new ListItem(Enum.GetName(typeof(MyEnum), item), item.ToString())); 
} 
+0

이것은 ListItems (EnumName, EnumName)를 생성하고, 필요한 수식은 ListItems (EnumName, ** EnumValue **)입니다. –

관련 문제