使用每行的按钮从数据视图中删除行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用每行的按钮从数据视图中删除行相关的知识,希望对你有一定的参考价值。

我有一个显示删除按钮的每一行永久删除数据库,如何从数据库中删除数据?

以下代码显示每行的删除按钮。我有用户Oracle数据库我在哪里写了删除查询?

DataGridViewLinkColumn Deletelink = new DataGridViewLinkColumn();
Deletelink.UseColumnTextForLinkValue = true;
Deletelink.HeaderText = "delete";
Deletelink.DataPropertyName = "lnkColumn";
Deletelink.LinkBehavior = LinkBehavior.SystemDefault;
Deletelink.Text = "Delete";
dataGridView1.Columns.Add(Deletelink);

我已经写了删除代码,但我失败了

private void dataGridView1_CellContentClick(object sender DataGridViewCellEventArgs e)
{
  if (e.ColumnIndex == 5)
  {
    empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value);
    OleDbDataAdapter adp = new OleDbDataAdapter("delete  from apps where appsid= '"+empid+"'", con);
    DataTable dt = new DataTable();
    adp.Fill(dt);
    dataGridView1.DataSource = dt;
    dataGridView1.Refresh();
答案

作为OleDbDataAdapter的构造函数发出的delete命令不正确。但是,适配器仍然会执行命令。但是你肯定不能指望使用delete命令来填充数据表。 你还需要一个SELECT。

通常这样做是从网格中删除行(这会将基础行标记为已删除然后,当您要将更改保存到数据库时,您应该使用原始DataAdapter和用于初始填充网格的原始DataTable来发出Update method

这里有很好的解释Using OleDbDataAdapter to Update a DataTable

或者您可以使用单独的命令自行更新并重新加载数据表

// Delete the record on the db
empid = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["empid"].Value);
OleDbCommand cmd = new OleDbCommand("delete from apps where appsid= @id", con);
cmd.Parameters.Add("@id", OleDbType.VarWChar).Value = empid;
cmd.ExecuteNonQuery();

// reload the grid with the updated info from the db
OleDbDataAdapter da = new OleDbDataAdapter("Select * from apps", con);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
dataGridView1.Refresh();

这当然有一个缺点,就是每次删除一行时都会重命两次数据库并重新加载所有内容。

以上是关于使用每行的按钮从数据视图中删除行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 从 asp.net 视图模型中动态删除行而不删除集合中的其余下一个对象

如何在 JFXTable 视图中添加按钮编辑和删除以及如何将行编辑到 SQL

如何从 X 个按钮中删除子视图

无法从自定义表格视图单元格按钮中删除行

无法从布局中删除视图

从数据网格中删除行