我在 web 窗体上放了两个 DropDownList,我初始化了 DropDownList1:
DropDownList1.Items.Add("abc");
DropDownList1.Items.Add("def");
DropDownList1.Items.Add("hijklmn");
然后我想把 DropDownList2 做的和 DropDownList1 一样,我用了下面的两种方法:
方法一:
ListItem[] items = new ListItem[DropDownList1.Items.Count];
DropDownList1.Items.CopyTo(items, 0);
DropDownList2.Items.AddRange(items);
方法二:
foreach (ListItem li in DropDownList1.Items)
DropDownList2.Items.Add(li);
(无论用哪种方法,都会导致下面的结果)
我执行
DropDownList2.SelectedIndex = 2;
奇怪的是,DropDownList1 也被默认选中了 2,也就是说,无论怎么样,DropDownList2 选中哪个,DropDownList1 就选中哪个。程序没有别的代码。上面的代码都放在了 Page_Load 里面。
究竟为什么会这样?怎么解决?
hoho
试试 把代码加上 if (!IsPostBack) { .... } 先.
试试这样:
for(int i=0;i<DropDownList1.Items.Count;i++)
DropDownList2.Items.Add(DropDownList1.Items[i].ToString());
http://expert.csdn.net/Expert/topic/1665/1665825.xml?temp=.7209741
这个贴子里面我给你的复制方法是可以复制的,但是是复制引用,所以会出现你的情况,如果按照这种方式复制,不出现这种情况才是不正常
按照你的要求,那么只有复制Value
"如果要同时复制 value,那整个语句岂不是显得很啰嗦?而且效率上也低一些。"
纠正你一个观点,代码很多、很罗嗦不一定代表效率低,要看你调用方法的效率,就像Array.Copy的方法,它里面还不是循环复制,只是这个循环他帮你写了,不用你自己写而已
你的代码应改为:
foreach (ListItem li in DropDownList1.Items)
DropDownList2.Items.Add( new ListItem(li.Text,li.Value) );