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

本文解析了DataGridView绑定List&lt;T&gt;类型数据源时出现IndexOutOfRangeException异常的问题,指出当List成员数量为0时容易触发该异常,并提供了解决方案,即使用BindingList&lt;T&gt;替代List&lt;T&gt;作为数据源。

最近在测试系统的时候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上面就进行了数据绑定。

以上仅是个人的理解,希望大牛批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大鱼>

一分也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值