c# - valores - El índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección
ocultar columna datagridview c# (3)
El error es: el índice estaba fuera de rango. Debe ser no negativo y menor que el tamaño de la colección.
Escenario: tengo una aplicación de escritorio que carga archivos XML y muestra los datos en Grid. Ahora, quiero insertar otro archivo y quiero agregar los datos en ambos archivos. Pero cuando trato de fusionar los datos (me refiero a agregar las filas a DataTable que tiene filas de archivos abiertos anteriormente) ... recibo este error.
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);
}
}
¿Cómo puedo superar este error?
Asegúrese de que sus matrices ( BookTitle
, BookAuthor
, BookGenre
, BookPrice
, BookPublish_Date
y BookDescription
) tengan la longitud correcta (mínimo intBooksCounter).
Bueno, parece que tienes una matriz n larga y estás tratando de acceder al enésimo o mayor elemento dentro de ella. Los índices están basados en 0, por lo que se debe acceder a una matriz de n tamaños mediante los índices 0 a n-1 .
La línea que causa problemas es esta:
int intCurrentRows = dgvBooksDetails.Rows.Count;
Tomas este valor como inicio para tu ciclo. Sin embargo, la colección de filas cuenta desde 0 hasta Count-1
, por lo que usar Count
para acceder a un valor de la colección de filas provoca un error de índice fuera de límites.
Otra cosa: BookTitle
, BookTitle
, etc. también se indexan de 0 a Count-1
(o Length-1
si son matrices). No estoy seguro de lo que nos has contado, pero ¿estás seguro de que se puede acceder a estas colecciones indexando de la forma en que lo haces? Quiero decir, ¿podría ser que solo contengan los elementos que se agregarán y por lo tanto deben ser indexados de 0 a X en vez de number of existing items
para el number of existing items + number of new items
(eso es lo que haces en tu código)?