Système.ArgumentOutOfRangeException s'est produite dans mscorlib.dll C#

J'ai un DataGridView qui je suis remplissage à partir d'une liste d'objets. Cependant mon 2ème boucle dans mon foreach résultats dans un ArgumentOutOfRangeException.

Voici mon code:

foreach (Abonat abonat in list.getAbonati())
{
    dataGridView1.Rows[i].Cells[0].Value = abonat.id; //exception occurs here on second loop
    dataGridView1.Rows[i].Cells[1].Value = abonat.prenume;
    dataGridView1.Rows[i].Cells[2].Value = abonat.nume;
    dataGridView1.Rows[i].Cells[3].Value = abonat.adresa;
    i++;
}

La première fois le foreach fonctionne, tout va bien, il montre même dans le DataGridView, mais la 2ème fois, j'ai l'exception (en fait, il dit Une exception de première chance de type 'System.ArgumentOutOfRangeException' s'est produite dans mscorlib.dll) et mon formulaire est affiché, sans courir le reste de la boucle foreach.

Toute aide à ce sujet? J'ai essayé de l'instanciation de la dataGridView1.Rows[i] = new DataGridViewRow(); mais elle est en lecture seule.

  • Il devrait y avoir un message de l'exception, il n'est pas très utile sans que. Quelle est la valeur de i?
  • Vous n'avez pas nous a montré où vous définissez/incrément je.
  • i est 0 au début et à 1 lorsque le "possible" exception se produit.
  • Quelle est la valeur de Rows lors de l'exécution de ce code? Peut-être qu'il n'a pas autant de lignes que vous pensez qu'elle a? Je ne sais pas quand ce code fonctionne, donc je ne peux que spéculer. Peut-être que la grille a rendu et est vide ou ne contient qu'une seule ligne? Pourquoi, en particulier, êtes-vous en boucle comme ceci à la place de la liaison de données pour le contrôle?
  • Vous avez probablement oublié d'ajouter la ligne en premier, dataGridView1.Les lignes.Ajouter();
  • ne devrait-elle pas avoir autant de lignes que je veux? Je veux dire que je ne suis pas définir le nombre de lignes n'importe où, donc peut-être qu'il a seulement 1. Dans ce cas, comment puis-je ajouter une autre ligne? Je suis en boucle comme ça, parce que c'est le seul moyen rapide je sais comment le faire.
  • Utilisation dataGridView1.Rows.Add(). Vous pouvez voir en action ici: msdn.microsoft.com/en-us/library/...
  • Qu'il a été. Merci @HansPassant et rsbarro

InformationsquelleAutor Eduard Luca | 2012-01-17