2011-01-17 2 views
1

사실 나는 달의 값이 31보다 높으면 첫 번째 목록에 개월을 표시합니다. 그렇지 않으면 맨 위에 표시됩니다. 그렇지 않으면 맨 위에 다른 것을 표시하는 방법이 표시됩니까?DropDownList의 맨 위에 선택된 인덱스를 표시하는 방법은 무엇입니까?

코드 뒤에 : 여기

코드입니다

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DropDownList2.Items.Clear(); 
    for (int i = 1; i <= int.Parse(DropDownList1.SelectedValue); i++) 
    { 
     DropDownList2.Items.Add(new ListItem("" + i)); 
    } 
} 

디자이너 소스 :

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
    <asp:ListItem Value="31">Jan</asp:ListItem> 
    <asp:ListItem Value="29">Feb</asp:ListItem> 
    <asp:ListItem Value="31">Mar</asp:ListItem> 
    <asp:ListItem Value="30">April</asp:ListItem> 
    <asp:ListItem Value="31">May</asp:ListItem> 
    <asp:ListItem Value="30">June</asp:ListItem> 
    <asp:ListItem Value="31">July</asp:ListItem> 
</asp:DropDownList> 
<asp:DropDownList ID="DropDownList2" runat="server"> 
</asp:DropDownList> 

문제는 다음과 같습니다

내가 또는 월 행진이나 값으로 모든 항목을 선택하면 31 일은에 표시되고 다른 경우에는 선택된 것이 표시됩니다.

+0

감사합니다. abatishchev u는 나를 도울 수 있지만 초보자이므로 코드를 이해할 수는 없지만 asp.net을 배우는 데 도움이되는 사람들에게 정말 감사드립니다. – Learner

+0

내 속성 창이 자동 숨김 모드로 표시되도록 만드는 방법 (자동 숨김 모드로 표시하지 않음) – Learner

+0

실지로 정확하지만 최선의 해결책은 아닙니다. 당신이 그것을 할 수 없을 때 월수를 하드 코딩하는 것은 무엇입니까?) 현재 연도와 선택한 월 인덱스 + 1 (1 월 : 1, 2 월 : 2, 3 월 : 1 월)의 수를 결정하기 위해'DateTime.DaysInMonth 3 등) – abatishchev

답변

2

ListItems 값은 고유해야합니다.

기본 선택 항목은 Jan (값 = 31)이므로 다른 값 (29 및 30)이있는 항목을 클릭하면 모든 것이 올바르게 작동합니다.

3 월, 5 월, 7 월 (값 = 31)을 클릭하면 1 월이 선택됩니다.

원하는 동작을 얻으려면 다른 방법을 사용하십시오.


가장 좋은 방법은 다음과 같습니다

using System.Linq; 

int count = DateTime.DaysInMonth(
    DateTime.Today.Year, 
    int.Parse(DropDownList2.SelectedIndex + 1)); // sic! 

DropDownList2.Items.AddRange(
    Enumerable.Range(1, count) 
     .Select(i => new ListItem(i.ToString())) 
     .ToArray()); 

그래서 당신은 하드 코드 아무것도 필요하지 않습니다! 모든 것이 이미 .NET FCL에 있습니다. 그것의 색인에서 목록에 달의 번호를 결정하십시오.

1

나는 약간의 연구를했으며 이것은 드문 문제는 아닙니다. 포스트 - 백 asp.net에서 선택한 값으로 목록의 첫 번째 항목을 표시합니다. 나는 주위 찾은 유일한 방법은 같은 모든 값이 고유하게하는 것입니다 :

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"> 
    <asp:ListItem Value="Jan-31">Jan</asp:ListItem> 
    <asp:ListItem Value="Feb-29">Feb</asp:ListItem> 
    <asp:ListItem Value="Mar-31">Mar</asp:ListItem> 
    <asp:ListItem Value="April-30">April</asp:ListItem> 
    <asp:ListItem Value="May-31">May</asp:ListItem> 
    <asp:ListItem Value="June-30">June</asp:ListItem> 
    <asp:ListItem Value="July-31">July</asp:ListItem> 
</asp:DropDownList> 

이 그런 다음 DropDownList1_SelectedIndexChanged 이벤트에 사항 String.split를 사용하는 '-'하루 카운트 값을 얻을 수 있습니다.

+0

내 속성 창이 비주얼 스튜디오에서 분리됩니다 (자동 숨김 모드로 표시하지 않음). 자동 숨김 모드로 표시하는 방법 – Learner