【问题标题】:Delete Row from datagridview using button en each row使用每行的按钮从 datagridview 中删除行
【发布时间】:2017-12-29 17:08:41
【问题描述】:

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

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

【问题讨论】:

  • 我们对您的设置知之甚少。如果要删除数据库中的一行,则需要一个 ID 或 Key。
  • 我已经编辑了我尝试使用网格索引解决的问题
  • dataGridView2 还是 dataGridView1 ?为什么要将数据表设置为 dataGridView2 的数据源?
  • 这是我的错误代码应该是dataGridView1

标签: c# sql oracle datagridview


【解决方案1】:

作为 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();

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

【讨论】:

  • 我使用 empid 作为字符串变量,它是使用@id 删除行的?
  • 就是参数'name',其值为empid的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多