2009-08-07 109 views
4

我能够获得添加到BindingList的项目的索引。当我试图让索引,如果删除的项目出现错误从绑定列表中获取已删除项目的索引

Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index 

这里是我的代码

Private Sub cmdRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRemove.Click 

    For i As Integer = 0 To _assignedSelection.SelectedCount - 1 
     Dim item As Jurisdiction = CType(_assignedSelection.GetSelectedRow(i), Jurisdiction) 
     _list.Remove(item) 
    Next 

End Sub 


Private Sub list_Change(ByVal sender As Object, ByVal e As ListChangedEventArgs) Handles _list.ListChanged 

    If (_list.Count > 0) Then 


     Select Case e.ListChangedType 
      Case ListChangedType.ItemAdded 
       _dal.InsertJurisdiction(_list.Item(e.NewIndex)) 
      Case ListChangedType.ItemDeleted 
       'MsgBox(e.NewIndex.ToString) 
       _dal.DeleteJurisdiction(_list.Item(e.NewIndex)) <--------HERE 
     End Select 

    End If 

End Sub 

编辑:在C#的答案,也欢迎任何人....?

回答

10

该项目被删除之前事件发生。这意味着(没有额外的代码),你不能到达被删除的项目。

你可以,但是,从继承的BindingList,并重写的removeItem:

public class BindingListWithRemoving<T> : BindingList<T> 
{ 
    protected override void RemoveItem(int index) 
    { 
     if (BeforeRemove != null) 
      BeforeRemove(this, 
        new ListChangedEventArgs(ListChangedType.ItemDeleted, index)); 

     base.RemoveItem(index); 
    } 

    public event EventHandler<ListChangedEventArgs> BeforeRemove; 
} 

你也应该复制的BindingList构造。此外,请勿尝试将其取消,因为致电者可能会认为致电Remove确实删除了该物品。

+1

这是一个记录了几个解决方法的错误(如peterchen友好提供的)! http://link.microsoft.com/VisualStudio/feedback/details/148506/listchangedtype-itemdeleted-is-useless-because-listchangedeventargs-newindex-is-already-gone – Harrison 2011-02-22 18:03:09

+0

@哈里森:感谢您的连接链接! – peterchen 2011-02-22 19:24:54

+0

这个事件的主要目的是传达UI控件应该删除的位置。 – 2016-09-05 09:37:44

0

我有点困惑你的问题的措辞。但是,如果某个项目已被删除,则该项目不再被编入索引。

如果您需要项目在删除之前所处的索引,可能是存储了一个静态变量(例如Private Shared removedIndex As Integer),并在删除项目之前设置该变量会给您想要的内容?

+0

不应该ListChanged事件给绑定列表中更改的项目的索引? – 2009-08-13 06:44:00

+0

它确实 - 但事后,请看我的回复。 – peterchen 2010-02-21 14:54:19

相关问题