发出DropDownList.Items.Addrange并选择值的问题

时间:2010-07-30 12:58:17

标签: c# asp.net drop-down-menu

我是C#的新手,因为我主要使用Java。

但直接问题(我已经简化了一点):

首先摘录我的aspx页面:

<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月!

我也尝试过使用非静态列表,但这并不重要。我测试的唯一“工作”是实例化两个不同的列表 - 只有我自己选择了dropdownlist-items。因此,添加这样的列表可以使事情有效(但很难看):

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

我通过asp.net添加数据源解决了这个问题,但是,知道这里发生了什么会很有趣。为什么我必须为每个下拉列表实例化一个新列表。每个控件都有自己的指针来跟踪自己的值吗?感觉就像指针在列表中以某种方式共享,但我将思考留给了更了解C#和ASP.NET的人

1 个答案:

答案 0 :(得分:3)

ListItems直接添加到DropDownList控件。所以实际上你正在做的是将2个不同的控件添加到EXACT相同的列表中。因此,只会实现最后选择的项目,因为同一个列表只能有一个选定的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")

       };
}

现在,您将始终创建一个新阵列。