C# 将一个值表单列表移动到另一个值表单列表,从列表中删除下一个值
我有两个列表框,当我将值交换到另一个列表框时,它总是从列表中删除下一个值,当我尝试从列表中交换最后一个值时,它从列表中获取最前面的一个值。我试图找出问题,但没有得到任何结果。下面是代码部分以供审查C# 将一个值表单列表移动到另一个值表单列表,从列表中删除下一个值,c#,winforms,bindingsource,C#,Winforms,Bindingsource,我有两个列表框,当我将值交换到另一个列表框时,它总是从列表中删除下一个值,当我尝试从列表中交换最后一个值时,它从列表中获取最前面的一个值。我试图找出问题,但没有得到任何结果。下面是代码部分以供审查 private void MoveListBoxItems(ListBox lstEmployeelist, ListBox lstSelectedEmployees) { ListBox.SelectedObjectCollection sourceItems = lstEmployeeli
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;
}
}
private void MoveListBoxItems(ListBox lstEmployeelist,ListBox lsselectedemployees)
{
ListBox.SelectedObjectCollection sourceItems=lstEmployeelist.SelectedItems;
List newsource=this.masterBindingSource.DataSource作为列表;
列表_selectedSource=this.masterSellectedBindingSource.DataSource作为列表;
尝试
{
如果(lstEmployeelist.Items.Count>0)
{
对于(int i=0;i 0)
this.masterBindingSource.RemoveCurrent();
this.masterSellectedBindingSource.EndEdit();
lstSelectedEmployees.DataSource=masterSellectedBindingSource;
lstSelectedEmployees.DisplayMember=“FirstName”;
lsselectedemployees.ValueMember=“Empno”;
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
我认为问题在于您迭代sourceItems的方式
因为您正在使用for循环执行此操作(可能是因为您无法使用foreach执行此操作,因为您无法修改集合),所以当您从集合中删除项目1并将其添加到第二个列表、项目2和上移1后的所有项目时
因此,第2项成为新的第1项,第3项成为第2项,等等
为了解决这个问题,当您决定移动一个项目时,您还需要将i减少1(i--;),这样当for循环再次循环并且i增加时,它会返回到相同的索引
如果要移动所有项目而不是仅选择项目,则不应使用for循环,而是使用while,如下所示:
while (sourceItems.Count > 0)
{
// code here
}
当用户从列表中选择多个项目时会发生什么?@a-goutam我不太明白你的意思?如果您正在处理列表中的选定项,那么您将遍历等效的SelectedItems集合,或者遍历每个项,检查它是否被选中并根据需要移动。你的代码并不能很好地演示你在做什么。我希望当用户从列表中选择一个值时,该值将从当前列表中删除,并且所选项目将在第二个列表中显示