3

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

场景:我有一个桌面应用程序,它加载 XML 文件并在网格中显示数据。现在,我想插入另一个文件并想在两个文件中追加数据。但是,当我尝试合并数据时(我的意思是将行添加到具有先前打开的文件行的 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);   
  }
}

我该如何克服这个错误?

4

3 回答 3

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(这就是你在代码中所做的)?

于 2012-07-16T10:54:39.980 回答
0

好吧,您似乎有一个n长的数组,并且您正试图访问其中的第 n 个或更大的元素。索引是基于0的,因此必须通过索引0n-1访问n大小的数组。

于 2012-07-16T10:51:39.620 回答
0

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

于 2012-07-16T10:57:24.513 回答