asp.net的DropDownList同步(asp.net DropDownList in syn

2019-10-23 04:07发布

我有选择的用户控件内一年三个下拉菜单。 负载我指定一个下拉选择的价值。 另外两个下拉菜单会自动得到分配相同选择的值。 不管我指定其下拉列表中选择值,她们三个人都得到相同的选择的值。 我试着重新创建为下拉菜单的新用户的控制,但同样的事情发生。

<%@ 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);
            }
        }
    }
}

有人可以帮助我弄清楚为什么三个下拉菜单似乎是同步? 谢谢!

Answer 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() );

这将创建列表项的新实例(具有相同的值)进入每个列表。



Answer 2:

问题是,你分享跨列表中的列表项的参考 。 所以,当.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());
    }
}


文章来源: asp.net DropDownList in sync