我正在尝试将数据逐行添加到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);
答案 0 :(得分:22)
错误显示“索引超出范围”。这意味着您试图使用无效的值索引对象。如果你有两本书,我请你给我第三本书,你会看到我很有趣。这是看着你搞笑的电脑。你说 - “创建一个集合”。所以它做到了。但最初这个集合是空的:它不仅没有任何东西 - 它没有空间可以容纳任何东西。 “它没有手”。
然后你说“该集合的第一个元素现在是'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
答案 1 :(得分:13)
您没有在DataGridView
DataGridView dataGridView1 = new DataGridView();//Create new grid
dataGridView1.Columns[0].Name = "ItemID";// refer to column which is not there
现在是否清楚为什么会有例外?
在使用列修复错误之前添加此行
dataGridView1.ColumnCount = 5;
答案 2 :(得分:5)
这意味着什么?我的代码中有任何问题
这意味着您正在访问集合中不存在的位置或索引。
要找到这个,请确保您的Gridview有5列,因为您正在使用它的第5列
dataGridView1.Columns[4].Name = "Amount";
这是显示数组元素的图像。因此,如果您的gridview的列数少于您访问它的(index + 1)
,则会出现此异常。
答案 3 :(得分:2)
dataGridView1.Columns
的长度可能小于5.访问dataGridView1.Columns[4]
然后将不在列表中。
答案 4 :(得分:1)
在网格视图中启用分页时会导致此错误。如果你想从网格中删除一条记录,那么你必须做这样的事情。
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();
希望这能回答这个问题。