< pre>Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
This is my code
< pre>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
Edit: The answer in C# is also welcome… Anyone?
However, you can inherit from BindingList and override RemoveItem:
public class BindingListWithRemoving: BindingList
{
protected override void RemoveItem(int index)
{
if (BeforeRemove != null)
BeforeRemove(this,
new ListChangedEventArgs (ListChangedType.ItemDeleted, index));
base.RemoveItem(index);
}
public event EventHandlerBeforeRemove;
}
You should also copy the BindingList constructor. Also, don’t try to make it cancelable, because the caller may assume that calling delete does delete the item.
< p>I am able to get the index of the item added to the BindingList. When I try to get the index, if the item is deleted I get the error
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
This is my code
Private Sub cmdRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd Remove.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
Edit: The answer in C# is also welcome…. Anyone ?
Before the event is triggered, the item will be deleted. This means (without additional code) you cannot access the item to be deleted.
However, you can inherit from BindingList and override RemoveItem:
public class BindingListWithRemoving: BindingList
{
protected override void RemoveItem(int index)
{
if (BeforeRemove != null)
BeforeRemove(this,
new ListChangedEventArgs(ListChangedType.ItemDeleted, index));
base.RemoveItem(index);
}
public event EventHandlerBeforeRemove;
}
You should also copy the BindingList Constructor. Also, don’t try to make it cancelable, because the caller may assume that calling delete does delete the item.