BindingList集合Remove(T)的时候, 出现提供的行索引超出范围异常

jobscq jobscq 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
开发环境: VS2010, .NET4.0

为了通知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方法导致的,
这个问题我可以用其他方法解决,但我不知道这里出现异常的原因,
请教各位给个答案!!
...全文
评论 6
收藏 已收藏
分享
返回顶部
jobscq
C# 111,129 成员 642,539 内容