C# 将项目从一个列表框移动到另一个列表框,反之亦然
我有两个名为 listbox1和listbox2C# 将项目从一个列表框移动到另一个列表框,反之亦然,c#,.net,winforms,listbox,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.DataSource = dt1;
listBox1.DisplayMember = "EmployeeName";
listBox1.ValueMember = "EmployeeId";
listBox2.DataSource = dt2;
listBox2.DisplayMember = "EmployeeName";
listBox2.ValueMember = "EmployeeId";
现在我想将项目从listbox1移动到listbox2,反之亦然
我尝试过,但它显示了一个异常,在分配数据源时无法更改该值
设置DataSource属性时,无法修改异常项集合。虽然我在这里含糊不清地猜测,但我认为问题在于您的数据源。如果我没弄错你的问题,你想在列表框之间移动条目,而不是在数据源之间移动条目?通过数据源,您可以链接到数据库中的表。如果您有两个不同的数据源,那么它们也可以链接到两个不同的表。在这些表之间移动对象(通过列表框)是个坏主意,不是吗 也许可以尝试通过类似DataSource.ToList()的方式填充列表框;因此,您可以释放到表的连接,当您移动完项目后,将列表框的内容写入相应的数据源
我希望这能有所帮助。当您设置listbox的数据源时,listbox必须完全依赖该数据源。您不能直接更改列表框中的项目,因为如果这样做,列表框与其数据源之间将存在差异。您需要在数据源之间传输条目,而不是在列表框之间传输条目。基本上,你需要说:
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);