2010-06-14 5 views
1

사용자 정의 컨트롤에서 연도를 선택하기위한 세 가지 드롭 다운이 있습니다. 로드 할 때 하나의 드롭 다운에 대해 선택한 값을 지정합니다. 다른 두 개의 드롭 다운에는 동일한 선택된 값이 자동으로 할당됩니다. 선택한 값을 어떤 드롭 다운에 할당했는지에 관계없이 모두 3 개의 동일한 값을 갖습니다. 드롭 다운에 대한 새 사용자 정의 컨트롤을 다시 만들려고했지만 동일한 문제가 발생합니다. 뒤에asp.net DropDownList가 동기화 됨

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DropDownTest.ascx.cs" Inherits="WymanOrgManagement.DropDownTest" %> 
<p> 
    <asp:DropDownList ID="ddlStartDateYear" runat="server"> 
    </asp:DropDownList> 
</p> 
<p> 
    <asp:DropDownList ID="ddlEndDateYear" runat="server"> 
    </asp:DropDownList> 
</p> 
<p> 
    <asp:DropDownList ID="Year" runat="server"></asp:DropDownList> 
</p> 

코드 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WymanOrgManagement 
{ 
    public partial class DropDownTest : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      populateDatesAndStates(); 
      ddlEndDateYear.SelectedIndex = 2; 
     } 

     protected void populateDatesAndStates() 
     { 
      ListItem init2 = new ListItem(); 
      init2.Text = init2.Value = "Year..."; 
      ddlStartDateYear.Items.Add(init2); 
      ddlEndDateYear.Items.Add(init2); 
      Year.Items.Add(init2); 

      for (int i = DateTime.Now.Year - 1; i < DateTime.Now.Year + 10; i++) 
      { 
       ListItem item = new ListItem(); 
       item.Text = item.Value = i.ToString(); 
       ddlStartDateYear.Items.Add(item); ddlEndDateYear.Items.Add(item); 
       Year.Items.Add(item); 
      } 
     } 
    } 
} 

사람이 세 개의 드롭 다운이 동기화 것 같다 왜 저를 알아내는 데 도움이 수 있습니까? 감사!

답변

1

세 개의 드롭 다운 모두 동일한 ListItem 인스턴스를 공유합니다. 한 곳에서 Selected으로 설정하면 3 곳 모두에서 선택됩니다.

ListItem item = new ListItem(); 
item.Text = item.Value = i.ToString(); 
ddlStartDateYear.Items.Add(item); 
ddlEndDateYear.Items.Add(item); 
Year.Items.Add(item); 

은 당신이 아마하고 싶은이

ddlStartDateYear.Items.Add(i.ToString()); 
ddlEndDateYear.Items.Add(i.ToString()); 
Year.Items.Add(i.ToString()); 

이 각 목록으로 이동합니다 (같은 값)을 ListItem의 새 인스턴스를 만들 것입니다.

1

문제는 참조을 ListItem 전체 목록에 공유하고 있다는 것입니다. 따라서 .Selected 속성이 하나의 드롭 다운에 설정되면 공유되므로 모든 속성에 걸쳐 설정됩니다. ListItems로 귀찮게하는 대신 문자열을 추가하고 문제를 완전히 피할 수 있습니다.

protected void populateDatesAndStates() 
{ 
    ddlStartDateYear.Items.Add("Year..."); 
    ddlEndDateYear.Items.Add("Year..."); 
    Year.Items.Add("Year..."); 

    for (int i = DateTime.Now.Year - 1; i < DateTime.Now.Year + 10; i++) 
    { 
     ddlStartDateYear.Items.Add(i.ToString()); 
     ddlEndDateYear.Items.Add(i.ToString()); 
     Year.Items.Add(i.ToString()); 
    } 
} 
관련 문제