无法将ListBox的选定项目传输到另一个ListBox

时间:2012-03-17 20:44:35

标签: c# asp.net .net listbox

我无法将所选项目从一个ListBox传输到另一个ListBox:

 protected void Button2_Click(object sender, EventArgs e)
    {
        foreach (ListItem li in ListBox2.Items)
        {
            if (li.Selected)
            {
                ListItem liNew = new ListItem(li.Text, li.Value);                
                ListBox1.Items.Add(liNew);
                ListBox2.Items.Remove(liNew);
            }
        }
    }

我得到了例外:

  

System.InvalidOperationException:修改了集合;枚举操作可能无法执行。

1 个答案:

答案 0 :(得分:6)

问题是,在迭代时,您无法从集合中删除元素。相反,您可以选择已选择的项目:)并循环它们。

foreach(ListItem li in ListBox2.Items.Where(x => x.Selected)) {
    ListItem liNew = new ListItem(li.Text, li.Value);
    ListBox1.Items.Add(liNew);
    ListBox2.Items.Remove(li);
}

(另外,我认为你的意思是li,而不是liNew。)


如果没有LINQ,它可能看起来像:

List<ListItem> toRemove = new List<ListItem>();

foreach(ListItem li in ListBox2.Items) {
    if(li.Selected) {
        ListItem liNew = new ListItem(li.Text, li.Value);
        ListBox1.Items.Add(liNew);
        toRemove.Add(li);
    }
}

foreach(ListItem li in toRemove) {
    ListBox2.Items.Remove(li);
}

此外,您可以按照@Steve:

的建议使用for循环
for(int i = ListBox2.Items.Count; --i >= 0;) {
    ListItem li = ListBox2.Items[i];

    if(li.Selected) {
        ListItem liNew = new ListItem(li.Text, li.Value);
        ListBox1.Items.Add(liNew);
        ListBox2.Items.RemoveAt(i);
    }
}