将一个值从列表移动到另一个列表,从列表中删除下一个值
本文关键字:列表 另一个 删除 下一个 移动 一个 | 更新日期: 2023-09-27 18:16:09
我有两个列表框,当我交换值到另一个列表框时,它总是从列表中删除下一个值,当我尝试从列表中交换最后一个值时,它从列表中获取顶部一个值。我试图找出问题所在,但一无所获。下面是要审查的代码部分。
private void MoveListBoxItems(ListBox lstEmployeelist, ListBox lstSelectedEmployees)
{
ListBox.SelectedObjectCollection sourceItems = lstEmployeelist.SelectedItems;
List<Master> newsource = this.masterBindingSource.DataSource as List<Master>;
List<Master> _selectedSource = this.masterSellectedBindingSource.DataSource as List<Master>;
try
{
if (lstEmployeelist.Items.Count > 0)
{
for (int i = 0; i <= sourceItems.Count -1 ; i++)
{
Master item = sourceItems[i] as Master;
this.masterSellectedBindingSource.AddNew();
Master sitems = masterSellectedBindingSource.Current as Master;
sitems.Empno = item.Empno;
sitems.FirstName = item.FirstName;
newsource.Remove((Master)item);
}
if (sourceItems.Count > 0)
this.masterBindingSource.RemoveCurrent();
this.masterSellectedBindingSource.EndEdit();
lstSelectedEmployees.DataSource = masterSellectedBindingSource;
lstSelectedEmployees.DisplayMember = "FirstName";
lstSelectedEmployees.ValueMember = "Empno";
}
}
catch (Exception ex)
{
throw ex;
}
}
我认为问题出在你迭代sourceItems的方式上。
因为你正在使用for循环(大概是因为你不能用foreach来做,因为你不能修改集合),当你从集合中删除项目1并将其添加到第二个列表时,项目2和所有项目上移1。
所以物品2变成新的物品1,物品3变成物品2,等等,等等……
要解决这个问题,当你决定移动一个项目时,你还需要将i减少1 (i——;),以便当for循环再次循环时,i增加,它会回到相同的索引。
如果你要移动所有项目,而不仅仅是选择项目,那么你不应该使用for循环,而应该使用while循环,像这样:
while (sourceItems.Count > 0)
{
// code here
}