zoukankan      html  css  js  c++  java
  • 访问DataGridView的Rows报了OutOfIndexRangeException错误

    DataGridView绑定了一个List<Entity>实体集合,在遍历DataGridView的每一行DataBoundItem时候,如果符合某个条件的话,则移除List<Entity>中的一个实体,这个过程忽略了一个很严重的问题,IEnumerable类型不能在被遍历的时候修改它的成员,否则将出现原本存在/不存在的成员无法访问/没被访问,我的话就是出现了无法访问的情况,因为原有的一个对象被我移除了,而它的Iterator还存在,结果系统访问了一个超出集合长度的对象,报了OutOfRangeException,代码如下:

    List<EntityRequest> requestList = this.selectedList as List<EntityRequest>;
                EntityRequest tempRqs;
                foreach (DataGridViewRow row in base.MainDgv.Rows)
                {
                    tempRqs = row.DataBoundItem as EntityRequest;
                    if ((row.Cells["CheckColumn"].EditedFormattedValue == null
                        || (bool)row.Cells["CheckColumn"].EditedFormattedValue == false)
                        && requestList.Contains(tempRqs))
                    {
                        requestList .Add(tempRqs);
                    }
                }
                return requestList;

    经过改正,应该这样修改:

    List<EntityRequest> requestList = this.selectedList as List<EntityRequest>;
                List<EntityRequest> tempRqsList = new List<EntityRequest>();
                EntityRequest tempRqs;
                foreach (DataGridViewRow row in base.MainDgv.Rows)
                {
                    tempRqs = row.DataBoundItem as EntityRequest;
                    if ((row.Cells["CheckColumn"].EditedFormattedValue == null
                        || (bool)row.Cells["CheckColumn"].EditedFormattedValue == false)
                        && requestList.Contains(tempRqs))
                    {
                        tempRqsList.Add(tempRqs);
                    }
                }
                foreach (EntityRequest item in tempRqsList)//遍历完dgv之前不能修改它的数据源,必须在遍历之后修改,否则容易报错
                {
                    requestList.Remove(item);
                }
                return requestList;

    经常犯这种低级错误,应该多注意注意了,警告自己

  • 相关阅读:
    路由和数据传递
    ASP.NET MVC3 自定义编辑模版
    最新Bootstrap手册
    ASP.NET MVC Bundles 用法和说明(打包javascript和css)
    MVC匿名类传值学习
    .net通用类型转换方法
    C#.net XML的序列化与反序列化
    The Connection Strings Reference
    ASP.NET MVC使用AuthenticationAttribute验证登录
    ASP.NET MVC Bundles 之学习笔记
  • 原文地址:https://www.cnblogs.com/cellphoneyeah/p/6438451.html
Copyright © 2011-2022 走看看