BindingList集合Remove(T)的时候, 出现提供的行索引超出范围异常
开发环境: VS2010, .NET4.0
为了通知datagridview , 我用了BindingList<T>集合作为数据源,发现BindingList<T>只能通知集合数量的增减,
不能更新每行数据的变化,所以有如下的类型:
为了行数据的实时更新,继承了INotifyPropertyChanged接口,还重写了比较的方法,
然后有对集合的操作
Add和Remove方法都被外部UI调用
现在问题是这样:当集合的数量是大于2时, 我反复操作UI让集合不停添加删除,偶尔会出现
“提供的行索引超出范围” 的异常, 这里的代码类和方法我都做了缩减,应该就是City类的Equals方法导致的,
这个问题我可以用其他方法解决,但我不知道这里出现异常的原因,
请教各位给个答案!!
为了通知datagridview , 我用了BindingList<T>集合作为数据源,发现BindingList<T>只能通知集合数量的增减,
不能更新每行数据的变化,所以有如下的类型:
public class City:INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public int ID{get;set;}
private string _address = string.Empty;
public string Address
{
get
{
return _address;
}
set
{
if (value != this._address)
{
_address = value;
NotifyPropertyChanged("Address");
}
}
}
public override bool Equals(object obj)
{
if ((obj as City).ID.Equals(this.ID))
return true;
return false;
}
public override int GetHashCode()
{
return (typeof(City).ToString() + this.ID).GetHashCode();
}
}
为了行数据的实时更新,继承了INotifyPropertyChanged接口,还重写了比较的方法,
然后有对集合的操作
private BindingList<City> cityList = new BindingList<City>();
public void Add(Country c)
{
//这里将Country 转换为 City
cityList.Add(city);
}
public void Remove(Country c)
{
City city = cityList.Where((_c)=> _c.ID == c.ID ).First();
cityList.Remove(city);
}
Add和Remove方法都被外部UI调用
现在问题是这样:当集合的数量是大于2时, 我反复操作UI让集合不停添加删除,偶尔会出现
“提供的行索引超出范围” 的异常, 这里的代码类和方法我都做了缩减,应该就是City类的Equals方法导致的,
这个问题我可以用其他方法解决,但我不知道这里出现异常的原因,
请教各位给个答案!!
...全文
相关推荐
java集合迭代器Iterator中的remove陷阱
主要介绍了java集合迭代器Iterator中的remove陷阱,需要的朋友可以参考下
Datatable删除行的Delete和Remove方法的区别介绍
Datatable删除行的Delete和Remove方法的区别介绍,需要的朋友可以参考一下
Android应用因索引超出范围问题而崩溃。 请帮我解决这个问题
Android仍基于Java语言,因此例外通常是应用程序中以Java为主题的问题。 “索引超出范围”表示您正在尝试引用当前集合内不可用的元素。 看看异常本身,索引...
java 索引越界异常(IndexOutOfBoundsException)
java 索引越界异常(IndexOutOfBoundsException) java 索引越界异常(IndexOutOfBoundsException)
java 集合并发操作出现的异常ConcurrentModificationException
Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。


