我有两个名为的列表框 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集合。”
答案 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;因此,您释放与表的连接,当您完成移动项目时,将列表框的内容写入相应的数据源。
我希望这有点帮助。