将项目从一个列表框移动到另一个列表框,反之亦然

时间:2013-12-12 08:42:14

标签: c# .net winforms listbox

我有两个名为的列表框 listbox1和listbox2

 listBox1.DataSource = dt1;
 listBox1.DisplayMember = "EmployeeName";
 listBox1.ValueMember = "EmployeeId";
 listBox2.DataSource = dt2;
 listBox2.DisplayMember = "EmployeeName";
 listBox2.ValueMember = "EmployeeId";

现在我想将项目从listbox1移动到listbox2,反之亦然

我试过,但它显示异常无法在分配数据源时更改值

Exception “设置DataSource属性时无法修改Items集合。”

2 个答案:

答案 0 :(得分:0)

设置列表框的数据源时,列表框必须仅依赖于该数据源。您无法直接更改列表框中的项目,因为如果这样做,列表框与其数据源之间将存在差异。您需要在数据源之间而不是在列表框之间传输条目。基本上,你需要说:

 int index = listBox1.SelectedIndex; //Or wherever else you want to get the index from.
 dt2.Add(dt1[index]);
 dt1.RemoveAt(index);

 listBox1.dataSource = null;
 listBox1.dataSource = dt1;

 listBox2.dataSource = null;
 listBox2.dataSource = dt2;

在这种情况下使用数据源可能并不明智,因为无论何时在两个列表框之间传输内容,都需要重置数据源。使用类似的东西可能更明智:

 foreach(string current in dt1)
      listbox1.Items.Add(current);

 foreach(string current in dt2)
      listbox2.Items.Add(current);

然后当您转移项目时,请转到:

 listbox2.Items.Add(listbox1.Items[index]);
 listbox1.Items.Remove(index);

答案 1 :(得分:-1)

虽然我在这里模糊地猜测,但我认为问题出在你的DataSources上。如果我理解你的问题,你想在Listbox之间而不是在DataSource之间移动条目?通过DataSource,您可以链接到例如数据库中的表。如果您有两个不同的DataSource,它们也可能链接到两个不同的表。在这些表之间移动对象(通过列表框)将是一个坏主意,不是吗?

也许尝试通过类似DataSource.ToList()的东西填充Listboxes;因此,您释放与表的连接,当您完成移动项目时,将列表框的内容写入相应的数据源。

我希望这有点帮助。