如何通过DataGridView每行的删除按钮永久删除数据库行
如何通过DataGridView中的删除按钮永久删除数据库对应行?
要实现点击DataGridView里的删除按钮永久删除数据库中的对应行,结合你已有的代码,我给你详细的实现方案:
第一步:处理DataGridView的CellClick事件
点击删除按钮时会触发DataGridView的CellClick事件,我们需要在这个事件里编写删除逻辑。你可以在窗体初始化时(比如Form_Load方法)绑定这个事件,或者直接在设计器里双击DataGridView的CellClick事件生成方法。
先把你原有的加载数据代码和事件绑定放在一起:
private void Form1_Load(object sender, EventArgs e) { // 你原有的数据加载代码 OleDbDataAdapter adp = new OleDbDataAdapter("select appsid,appsname from apps", con); DataTable dt = new DataTable(); adp.Fill(dt); dataGridView1.DataSource = dt; // 绑定CellClick事件,用于处理删除按钮点击 dataGridView1.CellClick += DataGridView1_CellClick; }
第二步:编写删除逻辑的事件处理方法
在这个方法里,我们需要判断点击的是不是删除按钮列,然后获取对应行的主键(appsid),执行数据库删除操作,最后刷新DataGridView的数据:
private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { // 校验:确保点击的是删除按钮列,且是有效数据行(不是表头和新增空白行) if (e.ColumnIndex == dataGridView1.Columns["Deletefromgrid"].Index && e.RowIndex >= 0 && !dataGridView1.Rows[e.RowIndex].IsNewRow) { // 获取当前行的appsid(数据库表的主键,用来精准定位要删除的记录) int appId = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["appsid"].Value); // 执行数据库删除操作,使用参数化查询避免SQL注入 string deleteSql = "DELETE FROM apps WHERE appsid = ?"; using (OleDbCommand cmd = new OleDbCommand(deleteSql, con)) { cmd.Parameters.AddWithValue("@appsId", appId); // 确保数据库连接处于打开状态 if (con.State != ConnectionState.Open) { con.Open(); } // 执行删除并判断是否成功 int affectedRows = cmd.ExecuteNonQuery(); if (affectedRows > 0) { // 刷新DataGridView数据,两种方式可选: // 方式1:重新加载整个数据源(适合数据量小的场景) OleDbDataAdapter refreshAdp = new OleDbDataAdapter("select appsid,appsname from apps", con); DataTable refreshDt = new DataTable(); refreshAdp.Fill(refreshDt); dataGridView1.DataSource = refreshDt; // 方式2:直接从绑定的DataTable中删除行(更高效) // DataTable boundDt = (DataTable)dataGridView1.DataSource; // boundDt.Rows[e.RowIndex].Delete(); // boundDt.AcceptChanges(); } // 关闭数据库连接 con.Close(); } } }
关键注意事项
- 主键定位:用
appsid作为删除条件是因为它是表的唯一标识,能精准定位要删除的记录,避免误删其他数据。 - 参数化查询:绝对不要用字符串拼接SQL的方式,参数化查询既能防止SQL注入攻击,也能避免数据格式(比如特殊字符)带来的错误。
- 连接管理:使用
using语句管理OleDbCommand,确保资源能被正确释放;同时要注意数据库连接的开闭状态,避免连接泄漏。 - 数据刷新:如果你的数据量不大,重新加载整个数据源更简单;如果数据量较大,直接操作绑定的DataTable会更高效。
内容的提问来源于stack exchange,提问作者khan
相关产品推荐
相关产品推荐

