如何删除datatable中的一行数据呢?

程晨c 2013-09-16 03:50:00
private void button3_Click(object sender, EventArgs e)
{
//删除一条数据
ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index];
ndt.Rows.Remove(ndr);
sda.Update(ndt);
}
为何这样操作后,数据库中的数据还存在呢
...全文
652 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arvin533 2015-09-01
  • 打赏
  • 举报
回复
没看明白,我用ajax删除
程晨c 2013-09-17
  • 打赏
  • 举报
回复
总结如下 1.dataRow.Delete();//将此行DataRowState标记为Deleted 2.datatabel.Rows.Remove(datarow);//将此行DataRowState标记为Detached 3.datatable.AcceptChanges();//将DataRowState标记为Deleted的行的更改为Detached 4.SqlDataAdapter.Update(datatable);//更新数据库,将DataRowState标记为Deleted的行从数据库中删除 所以 dataRow.Delete(); SqlDataAdapter.Update(datatable); 可以删除数据库中的数据 datatabel.Rows.Remove(datarow); SqlDataAdapter.Update(datatable); 不能删除数据库中的数据 dataRow.Delete(); datatable.AcceptChanges(); SqlDataAdapter.Update(datatable); 不能删除数据库中的数据
游戏人间 2013-09-17
  • 打赏
  • 举报
回复
DataTable中行的Remove 和 Delete方法区别是 Remove 是从DataTable 行集中移除 Delete 是标记DataTable 行的DataRowState 状态为Deleted的并非移除. 调用DataTable 的 AccepteChanges时才进行Remove掉(移除掉). Update 是根据DataTable行的DataRowState状态,更新回数据库 Added 对应插入 Modified对应修改 Deleted对应删除
phommy 2013-09-17
  • 打赏
  • 举报
回复
引用 13 楼 seleron 的回复:
[quote=引用 12 楼 phommy 的回复:] 你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去 把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除
感谢phommy的关注 请教 http://www.cnblogs.com/jhxk/articles/2328744.html 这篇文章里的删除方法改如何理解呢?网上好多介绍remove和removeat方法的文章,难道是这些文章错了?[/quote] 用处不同而已 如果只是把DataTable当数据载体用、不回写数据库,一般用Remove;增加Delete方法(只是我觉得,毕竟无法知道微软的人的真正想法)主要目的就是用于你这样的回写数据库需求的
  • 打赏
  • 举报
回复
如: DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'"); int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]); 缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/
程晨c 2013-09-17
  • 打赏
  • 举报
回复
引用 12 楼 phommy 的回复:
你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去 把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除
感谢phommy的关注 请教 http://www.cnblogs.com/jhxk/articles/2328744.html 这篇文章里的删除方法改如何理解呢?网上好多介绍remove和removeat方法的文章,难道是这些文章错了?
phommy 2013-09-17
  • 打赏
  • 举报
回复
你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去 把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除
程晨c 2013-09-17
  • 打赏
  • 举报
回复
demo代码如下(删除后数据库中数据仍然存在) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace testUpdateRow { public partial class Form1 : Form { private SqlConnection nSqlcon; private SqlDataAdapter sda; private DataSet nds; private DataTable ndt; private DataRow ndr; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //打开表 string strSql="Server=.;Database=weight;Uid=sa;Pwd=000"; nSqlcon = new SqlConnection(strSql); nSqlcon.Open(); strSql = "select * from material order by id"; sda = new SqlDataAdapter(strSql, nSqlcon); SqlCommand scmd = new SqlCommand("select * from material order by id", nSqlcon); sda.SelectCommand = scmd; SqlCommandBuilder scb = new SqlCommandBuilder(sda); nds = new DataSet(); sda.Fill(nds); ndt = nds.Tables[0]; dataGridView1.DataSource = ndt; } private void button1_Click(object sender, EventArgs e) { //新增一条记录 ndr = ndt.NewRow(); ndr["ID"] = textBox2.Text; ndr["Name"] = textBox3.Text; ndt.Rows.Add(ndr); sda.Update(ndt); } private void button2_Click(object sender, EventArgs e) { //修改一条记录 ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index]; ndr.BeginEdit(); ndr["Name"] = textBox3.Text; ndr.EndEdit(); sda.Update(nds); } private void button3_Click(object sender, EventArgs e) { //删除一条数据 ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index]; ndt.Rows.Remove(ndr); sda.Update(ndt); } } }
程晨c 2013-09-16
  • 打赏
  • 举报
回复
引用 8 楼 showlin 的回复:
调试,断点打在 sda.Update(ndt); 这句 看一下你sda的DeleteCommand值是否是正确的delete语句 而且,你只需要ndr.Delete()就可以了 具体你看下你ndr对应的RowState是否标记为删除就知道了 用DataAdapter更新数据库有两个要求 1、有对应的Insert/Update/DeleteCommand 2、相对应的DataRow标记为已增加/修改/删除
ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index]; dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); ndr.Delete(); sda.Update(ndt); 可以删除掉,数据库中也被删除了. 断点打在 sda.Update(ndt),查看sda的DeleteCommand值,发现为null值.ndr对应的RowState值为deleted.
卧_槽 2013-09-16
  • 打赏
  • 举报
回复
引用 6 楼 zunmaxiake 的回复:
你都从来没有delete from biao where.. 指定的数据库的那行数据凭什么消失啊?
SqlDataAdapter 可以自动创建这些代码。但是要调用SqlDataAdapter.update和SqlCommandBuilder。 还是不推荐这么做,如果数据库设计稍有改动,那这个方法就变摆设。
showlin 2013-09-16
  • 打赏
  • 举报
回复
调试,断点打在 sda.Update(ndt); 这句 看一下你sda的DeleteCommand值是否是正确的delete语句 而且,你只需要ndr.Delete()就可以了 具体你看下你ndr对应的RowState是否标记为删除就知道了 用DataAdapter更新数据库有两个要求 1、有对应的Insert/Update/DeleteCommand 2、相对应的DataRow标记为已增加/修改/删除
尊马夏客 2013-09-16
  • 打赏
  • 举报
回复
你都从来没有delete from biao where.. 指定的数据库的那行数据凭什么消失啊?
Teln_小凯 2013-09-16
  • 打赏
  • 举报
回复
string emailSql="select email,validFlag from emailMe"; DataSet emailAdd=new DataSet(); SqlDataAdapter emailAdapter=new SqlDataAdapter(emailSql,myConn); SqlCommandBuilder cb=new SqlCommandBuilder(emailAdapter); emailAdapter.Fill(emailAdd,"address"); myConn.Close(); DataTable myDt=emailAdd.Tables["address"]; myDt.PrimaryKey=new DataColumn[]{myDt.Columns["email"]}; ......//修改myDs数据 emailAdapter.Update(emailAdd,"address");
程晨c 2013-09-16
  • 打赏
  • 举报
回复
引用 3 楼 hytwl 的回复:
你都没用更新数据库,数据库中的数据肯定还在啊!
如何更新数据库呢?我是通过sda.Update(ndt);来更新的 private void Form1_Load(object sender, EventArgs e) { //打开表 string strSql="Server=.;Database=weight;Uid=sa;Pwd=000"; nSqlcon = new SqlConnection(strSql); nSqlcon.Open(); strSql = "select * from material order by id"; sda = new SqlDataAdapter(strSql, nSqlcon); SqlCommand scmd = new SqlCommand("select * from material order by id", nSqlcon); sda.SelectCommand = scmd; SqlCommandBuilder scb = new SqlCommandBuilder(sda); nds = new DataSet(); sda.Fill(nds); ndt = nds.Tables[0]; dataGridView1.DataSource = ndt;
hytwl 2013-09-16
  • 打赏
  • 举报
回复
你都没用更新数据库,数据库中的数据肯定还在啊!
程晨c 2013-09-16
  • 打赏
  • 举报
回复
引用 1 楼 ajdkjalj 的回复:
ndt是什么,表还是数据集
ndt是datatable ndr是datarow sda是dataadapter
ajdkjalj 2013-09-16
  • 打赏
  • 举报
回复
ndt是什么,表还是数据集

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧