错误是:索引超出范围。必须是非负数且小于集合的大小。
场景:我有一个桌面应用程序,它加载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);
}
}
如何克服此错误?
答案 0 :(得分:2)
造成麻烦的一行是:
int intCurrentRows = dgvBooksDetails.Rows.Count;
您将此值作为循环的开头。但是,rows集合的计数从0到Count-1
,因此使用Count
访问rows集合的值会导致索引超出边界错误。
另一件事:BookTitle
,BookAuthor
等也从0到Count-1
(或Length-1
,如果它们是数组)索引。我不确定你告诉我们的内容,但你确定这些收藏品可以通过索引的方式访问吗?我的意思是,它是否只包含要添加的项目,因此需要从0到X而不是number of existing items
到number of existing items + number of new items
的索引(这是您在代码中执行的操作)?
答案 1 :(得分:0)
好吧,你似乎有一个数组 n 很长,而你正试图访问其中的 nth 或更多元素。索引 0 ,所以 n 大小的数组必须由索引 0 访问 n-1 。< / p>
答案 2 :(得分:0)
确保您的阵列(BookTitle
,BookAuthor
,BookGenre
,BookPrice
,BookPublish_Date
和BookDescription
)具有正确的长度(最小的intBooksCounter)。