日期:2014-05-18  浏览次数:21009 次

C#DataGridView.Rows[i]问题
//清空现有DataGridView数据
  while (this.dataGridView1.Rows.Count != 0)
  {
  this.dataGridView1.Rows.RemoveAt(0);
  }
  //dataGridView1.Rows.Clear();
  modelList_quanxian = bll_quanxian.DataTableToList(bll_quanxian.GetAllList().Tables[0]);
for (int i = 0; i < modelList_quanxian.Count; i++)
  {
  model_quanxian = modelList_quanxian[i];
  DataGridViewRow dr = new DataGridViewRow();
  dataGridView1.Rows.Add(dr);
  dataGridView1.Rows[i].Cells[0].Value = model_quanxian.QuanXianBianHao;
  dataGridView1.Rows[i].Cells[1].Value = model_quanxian.QuanXianMingCheng;
  }
说明一下,Count有很多行,问题在于我往DataGridView中添加时,会报出Row[i]索引值超出范围,必须为非负值,并小于集合大小。
“dataGridView1.Rows[i]”引发了“System.ArgumentOutOfRangeException”类型的异常-------导致的问题是,新增和修改操作,调用此方法,页面结果显示不全。做删除操作时,调用此方法能够显示全。请问各位高手如何解决。

------解决方案--------------------
不明白你怎么会搞成这样,我把我自定义dataGridview控件里面的代码给你看下,反正用到现在还没问题暂时。

C# code

        /// <summary>
        /// 在最后一笔添加新行 
        /// </summary>
        public void AddNewRow()
        {   
             dataGridView1.Rows.Add();

             int i = dataGridView1.Rows.Count - 1;

             dataGridView1.CurrentCell = dataGridView1[0, i]; // 强制显示该行

             dataGridView1[0, i].Selected = true;   //光标移至该行


        }

        /// <summary>
        /// 删除最后一笔记录,或者选定的记录
        /// </summary>
        public void DeleteRow()
        {
            if (dataGridView1.CurrentRow == null)
                return;
            dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
        }

        /// <summary>
        /// 在选定的记录上面插入一笔记录
        /// </summary>
        public void InsertRow()
        {
            if (dataGridView1.SelectedRows.Count >= 1)
            {
                int iIndex = dataGridView1.SelectedRows[0].Index;
                dataGridView1.Rows.Insert(iIndex, 1);
            }
        }

------解决方案--------------------
是你cells超出范围不是rows
------解决方案--------------------
C# code

  while (this.dataGridView1.Rows.Count != 0)
  {
    dataGridView1.Rows.Clear();
  }