C# 索引超出范围。必须为非负且小于集合参数名称的大小:index

C# 索引超出范围。必须为非负且小于集合参数名称的大小:index,c#,datagridview,C#,Datagridview,我正在尝试将数据一行一行地添加到datagridview中,这是我的代码,上面写着: “索引超出范围。必须为非负且小于集合的大小。” 参数名称:索引“ 这是什么意思?我的代码中有什么问题 String Sqlstr2 = "select ItemName from Item where ItemID = '" + tbItemID.Text + "'"; db.DataRead(Sqlstr2); string ItemName = db.dr["ItemName"].ToString();

我正在尝试将数据一行一行地添加到datagridview中,这是我的代码,上面写着:

“索引超出范围。必须为非负且小于集合的大小。” 参数名称:索引“

这是什么意思?我的代码中有什么问题

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);
这意味着什么?我的代码有问题吗

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

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

dataGridView1.Columns[4].Name = "Amount";
这是显示数组元素的图像。因此,如果gridview的列数少于访问它的
(index+1)
,则会出现此异常


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

错误显示“索引超出范围”。这意味着您试图用无效的值索引对象。如果你有两本书,我请你把第三本书给我,你会觉得我很有趣。这台电脑看着你很有趣。你说“创建一个集合”。的确如此。但最初,这个集合是空的:它不仅没有任何东西,而且没有空间容纳任何东西。“它没有手”

然后您说“集合的第一个元素现在是‘ItemID’”。电脑说:“我从来没有被要求为‘第一件物品’创造空间。”我没有手来拿你给我的物品

根据您的代码,您创建了一个视图,但从未指定大小。你需要一个

dataGridView1.ColumnCount = 5;
在尝试访问任何列之前。修改

DataGridView dataGridView1 = new DataGridView();

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


请参见

您没有向
DataGridView添加列

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

dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there 
现在清楚为什么会有例外了吗

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

dataGridView1.ColumnCount = 5;

此错误是在网格视图中启用分页时引起的。若你们想从网格中删除一条记录,那个么你们必须这样做

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

希望这能回答这个问题。

只要一个简单的
dataGridView.Columns.Length
(或类似的东西)就可以告诉您它实际上有多少列。非常感谢您的回答,但是当运行程序时,从文本框和变量获取的数据仍然无法在dataGridView中查看。您能帮我吗?作为新问题发布,你肯定会得到帮助的。非常感谢你的回答。不客气。我觉得这和你接受的答案是一样的,尽管我是独立提出的(而且,我可以补充说,首先是::-)嗨,弗洛里斯。我在“dataGridView1.ColumnCount=2”处遇到错误“无法在数据绑定的datagridview控件c#上设置column count属性”,请帮助我解决此问题。@Sanjeev4evr-您的错误消息向我建议,如果无法设置该属性,则该属性必须由其他内容定义。也许“DataboundDataGridView”的列数是由数据固定的。如果您不使用该行,是否有效?当我删除该行时,它引发了相同的异常“索引超出范围。必须为非负且小于集合的大小。参数名称:Index”是。谢谢你回顾我的问题。你可以改天帮我。
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();