2013-05-31 30 views
1

我有兩個列表框,當我將值交換到另一個列表框時,它總是從列表中移除下一個值,當我嘗試從列表中交換最後一個值時,形成清單。我試圖找到問題,但我沒有得到任何結果。以下是審查的代碼部分。移動一個值表單到另一個刪除列表中的下一個值

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

回答

-1

我認爲問題出在您通過sourceItems迭代的方式。

因爲你正在使用for循環(大概是因爲你不能用foreach來做,因爲你不能修改集合),所以當你從集合中刪除第1項並將它添加到第2列表時,item 2個拉昇1.

畢竟項目,使項目2成爲新的第1項和第3項變爲第2項,等等,等等...

爲了解決這個問題,當你決定要移動的項目你還需要將i減1(i--;),這樣當for循環再次循環,並且i增加時,它將回到相同的索引。


,如果你是移動的所有項目,並不僅僅是選擇項目,那麼你不應該使用一個for循環,使用了一段時間,而不是像這樣:

while (sourceItems.Count > 0) 
{ 
    // code here 
} 
+0

發生什麼事,當用戶選擇多個項目從列表中? –

+0

@ a-goutam我不太明白你的意思?如果您正在處理列表中的選定項目,那麼您將遍歷相同的SelectedItems集合或遍歷每個項目,檢查它是否被選中並根據需要移動。 你的代碼並沒有真正證明你做得很好。 – Ashigore

+0

當我更改while循環中的代碼,然後它進入無限循環 –

相關問題