指数超出范围。必须是非负数且小于集合的大小

时间:2012-07-16 10:48:23

标签: c# visual-studio-2008 datagridview datatable

错误是:索引超出范围。必须是非负数且小于集合的大小。

场景:我有一个桌面应用程序,它加载XML文件并在Grid中显示数据。现在,我想插入另一个文件,并希望将数据附加到两个文件中。但是,当我尝试合并数据时(我的意思是将行添加到DataTable中,其中包含可以打开文件的行)...我收到此错误。

if (strPreviousFile != "")   
{  
  dgvBooksDetails.DataSource = dtBooks;   
  int intCurrentRows = dgvBooksDetails.Rows.Count;   
  intBooksCounter = intBooksCounter + intCurrentRows;   
  for (int c = intCurrentRows; c < intBooksCounter; c++)  
  {   
    Book objBook = new Book();   
    objBook.ID = BookID[c];   
    objBook.Title = BookTitle[c];  
    objBook.Author = BookAuthor[c];  
    objBook.Genre = BookGenre[c];  
    objBook.Price = Double.Parse(BookPrice[c]);  
    objBook.PublishDate = DateTime.Parse(BookPublish_Date[c]);  
    objBook.Description = BookDescription[c];  
    dtBooks.Rows.Add(objBook.ID, objBook.Title, objBook.Author, objBook.Genre,
                     objBook.Price, objBook.PublishDate, objBook.Description);   
  }
}

如何克服此错误?

3 个答案:

答案 0 :(得分:2)

造成麻烦的一行是:

int intCurrentRows = dgvBooksDetails.Rows.Count;

您将此值作为循环的开头。但是,rows集合的计数从0到Count-1,因此使用Count访问rows集合的值会导致索引超出边界错误。

另一件事:BookTitleBookAuthor等也从0到Count-1(或Length-1,如果它们是数组)索引。我不确定你告诉我们的内容,但你确定这些收藏品可以通过索引的方式访问吗?我的意思是,它是否只包含要添加的项目,因此需要从0到X而不是number of existing itemsnumber of existing items + number of new items的索引(这是您在代码中执行的操作)?

答案 1 :(得分:0)

好吧,你似乎有一个数组 n 很长,而你正试图访问其中的 nth 或更多元素。索引 0 ,所以 n 大小的数组必须由索引 0 访问 n-1 。< / p>

答案 2 :(得分:0)

确保您的阵列(BookTitleBookAuthorBookGenreBookPriceBookPublish_DateBookDescription)具有正确的长度(最小的intBooksCounter)。