private void btnDelete_Click(object sender, EventArgs e)
{
int i;
i = dataGridView1.SelectedCells[0].RowIndex;
OleDbConnection con = new OleDbConnection(constr);
OleDbCommand delcmd = new OleDbCommand();
if (dataGridView1.Rows.Count > 1 && i != dataGridView1.Rows.Count - 1)
{
delcmd.CommandText = "DELETE FROM tb1 WHERE ID=" + dataGridView1.SelectedRows[i].Cells[0].Value.ToString() + "";
con.Open();
delcmd.Connection = con;
delcmd.ExecuteNonQuery();
con.Close();
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);
MessageBox.Show("Row Deleted");
}
}
这是我从datagridview和数据库中删除seleted行的代码,但是当我点击删除按钮时,它显示此错误...
“索引超出范围 . 必须是非负数且小于集合的大小 . 参数名称:index”
Plz帮我代码......
4 回答
手动探索
DataGridView
以填充然后访问数据(我的意思是从单元格中获取值),以及忽略using
用于一次性用品,以及使用字符串连接而不是参数化查询,是地狱的直接方式 .我强烈建议您使用数据绑定和参数化查询 .
声明一个实体类型,其实例将显示在
DGV
中:将
DGV
列配置为数据绑定(对于示例,分别将DataPropertyName
属性设置为"Id"和"Name")并设置DGV
数据源:如果要从
DGV
删除项目,请使用基础数据源而不是从视图中拾取数据:以这种方式尝试按照以下步骤操作
1.从DataBase中删除您的行
2.清除DataGridview的数据源
3.从数据库中选择数据并将其设置为DataGridview
这意味着您正在访问集合中不存在的位置或索引 . 单击“删除”按钮时,请验证是否选择了任何单元格 .