2010-06-14 4 views
1

У меня есть три выпадающих списка для выбора года внутри пользовательского элемента управления. При загрузке я определяю выбранное значение для одной капли. Остальным двум выпадающим спискам автоматически присваивается одинаковое выбранное значение. Независимо от того, какой выпадающий я присваиваю выбранное значение, все они получают одинаковое выбранное значение. Я попытался воссоздать новый пользовательский элемент управления для выпадающих меню, но то же самое происходит.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 в одном месте, он будет выбран во всех трех местах.

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

Проблема в том, что вы передаете ссылку в список по всем спискам. Поэтому, когда свойство .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()); 
    } 
}