Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将项目从一个列表框移动到另一个列表框,反之亦然_C#_.net_Winforms_Listbox - Fatal编程技术网

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

C# 将项目从一个列表框移动到另一个列表框,反之亦然,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和listbox2

 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);