2010-07-30 4 views
3

저는 주로 Java를 사용하기 때문에 C#을 처음 사용합니다. DropDownList.Items.Addrange를 발행하고 값을 선택하는 중

그러나 직선 (I 조금 단순화) 문제에

:

<div class="dates"> 
    <div class="firstselection"> 
     <asp:DropDownList ID="DDFromMonth" runat="server"> 
     </asp:DropDownList> 
     <asp:DropDownList ID="DDToMonth" runat="server"> 
     </asp:DropDownList> 
    </div> 
</div> 

그리고 숨김 :

public partial class Argh: System.Web.UI.Page 
    { 
    static List<ListItem> monthList = new List<ListItem> 
    { 
    new ListItem("Jan", "1"), 
    new ListItem("Feb", "2"), 
    new ListItem("Mar", "3"), 
    new ListItem("Apr", "4"), 
    new ListItem("May", "5"), 
    new ListItem("Jun", "6"), 
    new ListItem("Jul", "7"), 
    new ListItem("Aug", "8"), 
    new ListItem("Sep", "9"), 
    new ListItem("Oct", "10"), 
    new ListItem("Nov", "11"), 
    new ListItem("Dec", "12") 
    }; 



     protected void Page_Load(object sender, EventArgs e) 
     { 
    DDFromMonth.Items.AddRange(monthList.ToArray()); // DDFromMonth is a asp.net dropdown list 
    DDToMonth.Items.AddRange(monthList.ToArray()); // DDToMonth is a asp.net dropdown list 

      DDFromMonth.SelectedValue = "6"; 
      DDToMonth.SelectedValue = "7"; // also changes DDFromMonth value (GODDAMN!) 

} 

좋아 내 영문 페이지의 발췌

우선 나는 그 달이 들어있는 정적 인 목록을 가지고있다. 이 목록의 범위를 드롭 다운 컨트롤과 DDFromMonth에 모두 추가합니다. 6 월 (6 월)과 DDToMonth "7 월 (7 월)"을 선택합니다. 그러나 두 드롭 다운리스트 모두 7 월에 표시됩니다.

정적이 아닌 목록으로 시도했지만 문제가되지 않습니다. 테스트 한 유일한 것은 두 개의 다른 목록을 인스턴스화하는 것입니다. 그러면 드롭 다운 목록 항목이 원하는대로 선택됩니다. 그래서,이 할 일 작업 등의 목록을 추가 (하지만 추한) :

DDFromMonth.Items.AddRange(monthList.ToArray()); 
DDFromMonth.Items.AddRange(aDuplicatedMonthList.ToArray()); 

나는이 문제를 해결 일한 asp.net을 통해 데이터 소스를 추가하여,하지만 여전히, 여기 무슨 일이 일어나고 있는지 알고 흥미로운 일이 될 것이다. 왜 각 드롭 다운 목록에 대해 새 목록을 인스턴스화해야합니까? 각각의 컨트롤에는 자신의 값을 추적하는 자체 포인터가 있습니까? 어떻게 든 포인터가 목록에서 공유되는 것처럼 느껴지지만 C# 및 ASP.NET을 더 잘 알고있는 사람에게 숙고를 남깁니다.

답변

3

ListItems는 DropDownList 컨트롤에 직접 추가됩니다. 그래서 실제로 두 개의 다른 컨트롤에 정확히 같은 목록을 추가하는 것입니다. 따라서 동일한 목록에 하나의 ListItem 만 선택 될 수 있으므로 마지막으로 선택된 항목 만 구현됩니다.

간단한 방법

은 당신이 될 것 원하는 것을 할 수 있습니다 :
protected ListItem[] MonthList 
{ 
    get 
    { 
     return new ListItem[] 
     { 
     new ListItem("Jan", "1"), 
     new ListItem("Feb", "2"), 
     new ListItem("Mar", "3"), 
     new ListItem("Apr", "4"), 
     new ListItem("May", "5"), 
     new ListItem("Jun", "6"), 
     new ListItem("Jul", "7"), 
     new ListItem("Aug", "8"), 
     new ListItem("Sep", "9"), 
     new ListItem("Oct", "10"), 
     new ListItem("Nov", "11"), 
     new ListItem("Dec", "12") 

     }; 
} 

지금 당신은 항상 새로운 배열을 만들 수 있습니다.

+2

감사합니다. SirDemon. 따라서 ASP.NET에서 선택된 항목 (?)을 추적 할 수있는 컨트롤 대신 항목 자체가 선택 여부를 추적합니다. 나는 다른 방법으로 익숙해 져 있기 때문에 약간 어색함을 느낀다. 제공하신 솔루션이 멋지고 우아합니다. – Aph0

관련 문제