指数超出范围。 必须是非负数且小于集合参数名称的大小:index

我正在尝试将数据逐行添加到datagridview这里是我的代码,它说:“索引超出范围。必须是非负数且小于集合参数名称的大小:index”是什么这意味着 ? 在我的代码中有任何问题

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); 

您没有向DataGridView添加列

 DataGridView dataGridView1 = new DataGridView();//Create new grid dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 

现在清楚为什么你得到一个例外?

在使用列修复错误之前添加此行

 dataGridView1.ColumnCount = 5; 

错误显示“索引超出范围”。 这意味着您试图使用无效的值索引对象。 如果你有两本书,我请你给我第三本书,你会看到我好笑。 这是看着你搞笑的电脑。 你说 – “创建一个集合”。 所以它做到了。 但最初这个集合是空的:它不仅没有任何内容 – 它没有空间可以容纳任何东西。 “它没有手”。

然后你说“该集合的第一个元素现在是’ItemID’”。 电脑说:“我从未被要求为’第一项’创造空间。” 我无法抓住你给我的这个项目。

就您的代码而言,您创建了一个视图,但从未指定过大小。 你需要一个

 dataGridView1.ColumnCount = 5; 

在尝试访问任何列之前。 修改

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

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

请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.columncount.aspx

这意味着什么? 在我的代码中有任何问题

这意味着您正在访问集合中不存在的位置或索引。

要找到这个,请确保您的Gridview有5列,因为您正在使用它的第5列

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

这是显示数组元素的图像。 因此,如果您的gridview具有较少的列,那么您访问它的(index + 1) ,则会出现此exception。

在此处输入图像描述

dataGridView1.Columns的长度可能小于5.然后访问dataGridView1.Columns[4]将在列表之外。

在网格视图中启用分页时会导致此错误。 如果要从网格中删除记录,则必须执行此类操作。

 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(); 

希望这能回答这个问题。