在两个Datagridviews之间复制时获取System.ArgumentOutOfRangeException

时间:2016-01-15 13:20:34

标签: c#

如果有人可以帮助解决以下问题:

  

System.ArgumentOutOfRangeException:索引超出范围。一定是   非负面且小于集合的大小。参数名称   :index

代码:

for (int i = 0; i <= dataGridView2.Rows.Count ; i++)
{
   for (int j = 0; j <= dataGridView3.Rows.Count; j++)
   {
      if (!string.IsNullOrEmpty(dataGridView2.Rows[i].Cells["supplier_name"].Value as string) && !string.IsNullOrEmpty(dataGridView3.Rows[j].Cells["brands_supplier"].Value as string))
      {
         if (dataGridView2.Rows[i].Cells["supplier_name"].Value.ToString() == dataGridView3.Rows[j].Cells["brands_supplier"].Value.ToString())
         {                                   
            dataGridView2.Rows[i].Cells["brands_name"].Value += dataGridView3.Rows[j].Cells["brands_nume"].Value + " ";
         }
      }
      else
      {
         break;
      }
   }
}

2 个答案:

答案 0 :(得分:1)

您尝试访问不存在的数据网格元素 您必须将for条件设置为

for (int i = 0; i < dataGridView2.Rows.Count ; i++)

for (int j = 0; j < dataGridView3.Rows.Count; j++)

请勿使用<=,因为dataGridView.Rows[]的索引为0。

例如,如果您的数据网格包含3个元素,则可以通过以下方式访问它们:

var row1 = dataGrid.Rows[0]
var row2 = dataGrid.Rows[1]
var row3 = dataGrid.Rows[2]

您尝试访问

var row4 = dataGrid.Rows[3]  // Error because this item doesn't exist (System.ArgumentOutOfRangeException)

同样,但此项目不存在

答案 1 :(得分:0)

我认为周期中的问题

for (int i = 0; i <= dataGridView2.Rows.Count ; i++)

你又跑了一次

使用

for (int i = 0; i < dataGridView2.Rows.Count ; i++)