DataGridView绑定List<T>,出现IndexOutOfRangeException异常

原创 2016年08月16日 11:32:45

最近在测试系统的时候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 没有值

已成功测试,用bindinglist而且不用重新绑定,好用! 在我做项目的时候,datagridview绑定对象列表后,再点击datagridview控件,就会报一个"索引 -1 没有值。"的错...
  • CDUT100
  • CDUT100
  • 2013年12月03日 16:19
  • 2003

遍历List<T>包含字典Dictionary和其他字段dataGridView绑定数据

以前做WinForm接触的不多字典类型而且返回在List中,在dataGridView绑定的时候遇到问题,单元格显示集合并不显示数据,在窗体上放一个dataGridView, 下面是类: publ...

Winform中DataGridView绑定List<T>数据源时,点击DataGridView列头不能自动排序解决方法

*********************************************方法一********************************************* 自定义...

WinForm程序用使用List对象绑定DataGridView数据源

1、 在用List对象绑定DataGridView数据源属性的时候,数据源的内容不会动态更新,如果List对象集合中的数据发生变化,那么数据控件的数据源是不会得到更新的。一般也不建议用List去填充数...

解决DataGridView绑定List后不能排序的问题

以前不都是用table直接绑定DataGridView的,没有出现过不能排序的问题,初试List结果发现不管怎么样都不能实现排序的功能,有朋友说 DataGridView每一列都有个Sortable,...

GridControl 控件-----List<T>数据源 实现主从表关系绑定

网上有很多有关GridControl 控件的使用和属性调整,本系列博文中不在说明. 下面先说GridControl 如何用List作为数据源实现主从关系视图,博主在刚开始做的时候也是按网上的教程进行...

DataGridView.DataSource= list(Of T)

在D层查询完成之后,我们将DataTable转化为泛型集合,然后经过中间各层,返回U层,到了这里,问题来了,我们这时候要将这个集合作为数据源绑定到DataGridView上,并将结果显示出来,本文主要...

Dev GridView 绑定List<T>、BindingList <T>、BindingSource

今天听到同事处理数据结构的时候特意处理为了 BindingList,据说可以直接绑定到Dev GridView上,于是测试了一下: 1、在Dev GridView中新增三列,三列的FieldName分...

关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理

说明:写了一个随机抽题的方法,用于随机抽取access数据库题目,开始时能够正常抽题,正常显示,大概随机抽取20-30题左右,出现上述异常。然后vs2008提示: private void btnR...

DataGridView控件Combox列数据绑定

  • 2017年10月17日 08:41
  • 57KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DataGridView绑定List<T>,出现IndexOutOfRangeException异常
举报原因:
原因补充:

(最多只允许输入30个字)