web-dev-qa-db-fra.com

L'index était hors de portée. Doit être non négatif et inférieur à la taille du nom du paramètre de collection: index

J'essaie d'ajouter des données une par une à une datagridview. Voici mon code qui dit: "L'index était en dehors de la plage. Doit être non négatif et inférieur à la taille du nom du paramètre de collection: index" que fait-on? ça signifie ? y a-t-il un problème dans mon code

String Sqlstr2 = "select ItemName from Item where ItemID = '" + tbItemID.Text + "'";
db.DataRead(Sqlstr2);
string ItemName = db.dr["ItemName"].ToString(); 

DataGridView dataGridView1 = new DataGridView();

dataGridView1.Columns[0].Name = "ItemID";
dataGridView1.Columns[1].Name = "ItemName";
dataGridView1.Columns[2].Name = "Qty";
dataGridView1.Columns[3].Name = "UnitPrice";
dataGridView1.Columns[4].Name = "Amount";

string firstColum = tbItemID.Text;
string secondColum = ItemName;
string thirdColum = tbQuantity.Text;
string fourthColum = Convert.ToString(UnitPrice);
string fifthColum = Convert.ToString(sum);

string[] row = new string[]{ firstColum, secondColum, thirdColum, fourthColum, fifthColum };
dataGridView1.Rows.Add(row);
15
user2566013

Vous n'ajoutez pas de colonnes à votre DataGridView

DataGridView dataGridView1 = new DataGridView();//Create new grid

dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 

Est-il clair maintenant pourquoi vous obtenez une exception?

Ajoutez cette ligne avant d'utiliser des colonnes pour corriger l'erreur

dataGridView1.ColumnCount = 5;
14
Sriram Sakthivel

L'erreur dit "L'index est hors limites". Cela signifie que vous avez essayé d'indexer un objet avec une valeur non valide. Si vous avez deux livres et que je vous demande de me donner votre troisième livre, vous me regarderez de façon amusante. C'est l'ordinateur qui vous regarde drôle. Vous avez dit "créer une collection". Donc ça l'a fait. Mais au départ, la collection est vide: non seulement il n’y a rien, mais il n’a pas d’espace pour rien. "Il n'a pas de mains".

Ensuite, vous avez déclaré que "le premier élément de la collection est maintenant" ItemID "". Et l'ordinateur dit "On ne m'a jamais demandé de créer de l'espace pour un" premier élément "." Je n'ai pas de mains pour tenir cet objet que vous me donnez.

En termes de code, vous avez créé une vue, mais vous n’avez jamais spécifié la taille. Tu as besoin d'un

dataGridView1.ColumnCount = 5;

Avant d'essayer d'accéder aux colonnes. Modifier

DataGridView dataGridView1 = new DataGridView();

dataGridView1.Columns[0].Name = "ItemID";

à

DataGridView dataGridView1 = new DataGridView();
dataGridView1.ColumnCount = 5;
dataGridView1.Columns[0].Name = "ItemID";

Voir http://msdn.Microsoft.com/en-us/library/system.windows.forms.datagridview.columncount.aspx

22
Floris

qu'est-ce que cela signifie ? y a-t-il un problème dans mon code

Cela signifie que vous accédez à un emplacement ou à un index qui n'est pas présent dans la collection.

Pour le trouver, assurez-vous que votre Gridview a 5 colonnes car vous utilisez sa 5ème colonne par cette ligne

dataGridView1.Columns[4].Name = "Amount";

Voici l'image qui montre les éléments d'un tableau. Donc, si votre gridview a moins de colonne que le (index + 1) par lequel vous y accédez, cette exception se produit.

enter image description here

5
Sachin

dataGridView1.Columns a probablement une longueur inférieure à 5. Accéder à dataGridView1.Columns[4] sera alors en dehors de la liste.

2
meilke

Cette erreur survient lorsque vous avez activé la pagination en mode Grille. Si vous souhaitez supprimer un enregistrement de la grille, vous devez procéder de la sorte.

int index = Convert.ToInt32(e.CommandArgument);
int i = index % 20;
// Here 20 is my GridView's Page Size.
GridViewRow row = gvMainGrid.Rows[i];
int id = Convert.ToInt32(gvMainGrid.DataKeys[i].Value);
new GetData().DeleteRecord(id);
GridView1.DataSource = RefreshGrid();
GridView1.DataBind();

J'espère que cela répond à la question.

1
Kamran Binyamin