使用每行的按钮从数据视图中删除行
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 视图模型中动态删除行而不删除集合中的其余下一个对象