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

时间:2017-12-29 17:08:42

标签: c# sql oracle datagridview

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

以下代码显示每行的删除按钮。我有用户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();

1 个答案:

答案 0 :(得分:0)

作为OleDbDataAdapter的构造函数发出的删除命令不正确。但是,适配器仍然会执行命令。但是你肯定不能指望使用删除命令来填充数据表 你还需要一个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();

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