DataGridView绑定List<T>,出现IndexOutOfRangeException异常
2016-08-16 11:32
465 查看
最近在测试系统的时候DataGridView出现IndexOutOfRangeException异常,对DataGridView绑定的数据源类型是List<T>。由于DataGridView我使用的是第三方插件DEV,开始我以为是我引用的第三方插件dll版本不兼容造成的,很快这个假象被推翻。最后在国外一个论坛上找到一个靠谱的解答。
大致意思在向DataGridView绑定List类型的对象时,如果对象的成员为0,那么就会出现此问题。而且即使重新绑定DataGridView的数据源,也会继续存在此问题,解决的方法就是在向DataGridView绑定List类型的对象,要保证其中至少有一个成员。最好的方法,是用BindingList<T>对象代替List<T>对象作为DataGridView的数据源,即可彻底解决此问题,而且能实现DataGridView修改时与数据源的自动更新。
也就是说,我绑定的List对象,成员有时候会为空!!!好吧,问题找到,我当时为了避免存在数据会加载重复,在方法里面将List进行了清空,然后采用异步对List再次绑定数据。如下:
//if (BListEmployee.Count > 0)
//BListEmployee.Clear();
tsp_Addusr.Enabled = true;
CarProgress.HideProgress();
if (ServiceStateErr.Succeed == err)
{
if (!IsHandleCreated) return;
dgv_user.Invoke((EventHandler)delegate
{
......
if (OwnerUser.Instance.User.UserName != "admin" && item.ClientId != "0")
{
BListEmployee.Add(item);
}
else if (OwnerUser.Instance.User.UserName == "admin")
{
BListEmployee.Add(item);
}
}
}
或许就是这个异步的原因造成数据还没绑定到List上面就进行了数据绑定。
以上仅是个人的理解,希望大牛批评指正。
大致意思在向DataGridView绑定List类型的对象时,如果对象的成员为0,那么就会出现此问题。而且即使重新绑定DataGridView的数据源,也会继续存在此问题,解决的方法就是在向DataGridView绑定List类型的对象,要保证其中至少有一个成员。最好的方法,是用BindingList<T>对象代替List<T>对象作为DataGridView的数据源,即可彻底解决此问题,而且能实现DataGridView修改时与数据源的自动更新。
也就是说,我绑定的List对象,成员有时候会为空!!!好吧,问题找到,我当时为了避免存在数据会加载重复,在方法里面将List进行了清空,然后采用异步对List再次绑定数据。如下:
//if (BListEmployee.Count > 0)
//BListEmployee.Clear();
tsp_Addusr.Enabled = true;
CarProgress.HideProgress();
if (ServiceStateErr.Succeed == err)
{
if (!IsHandleCreated) return;
dgv_user.Invoke((EventHandler)delegate
{
......
if (OwnerUser.Instance.User.UserName != "admin" && item.ClientId != "0")
{
BListEmployee.Add(item);
}
else if (OwnerUser.Instance.User.UserName == "admin")
{
BListEmployee.Add(item);
}
}
}
或许就是这个异步的原因造成数据还没绑定到List上面就进行了数据绑定。
以上仅是个人的理解,希望大牛批评指正。
相关文章推荐
- DataGridView和List<T>绑定不显示问题
- 用List<T> 给 DataGridView 绑定数据时,无法正常显示
- WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- winform技巧—List<T>绑定datagridview控件
- 遍历List<T>包含字典Dictionary和其他字段dataGridView绑定数据
- [转]WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- List<T>绑定到datagridview时不能排序
- WinForm DataGridView 绑定泛型List(List<T>)/ArrayList不显示的原因和解决
- List<T> 直接绑定到datagridview上不显示数据.
- winform:对dataGridView绑定的泛型List<T> 的简单CRUD
- DataGridview 绑定泛型List<T>
- DataGridView绑定List<T>数据源时,点击DataGridView列头自动排序解决方法
- DataGridView 控件绑定List<T>
- DataGridView 绑定List<>数据的更新
- C#中使用BindingList 绑定DataGridView 可以实现动态绑定,优与List<T>集合的绑定
- DataGridView绑定BindingList<T>带数据排序的类
- Winform中DataGridView绑定List<T>数据源时,点击DataGridView列头不能自动排序解决方法
- DataGridView 绑定List<T>
- GridControl 控件-----List<T>数据源 实现主从表关系绑定
- struts标签绑定Map<String, List<Map<String, Object>>>