日期:2014-05-17  浏览次数:21218 次

如何删除datatable中的一行数据呢?
        private void button3_Click(object sender, EventArgs e)
        {
            //删除一条数据
            ndr = ndt.Rows[dataGridView1.SelectedRows[0].Index];
            ndt.Rows.Remove(ndr);
            sda.Update(ndt);
        }
为何这样操作后,数据库中的数据还存在呢

------解决方案--------------------
ndt是什么,表还是数据集
------解决方案--------------------
你都没用更新数据库,数据库中的数据肯定还在啊!
------解决方案--------------------
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");
------解决方案--------------------
你都从来没有delete from biao where..
指定的数据库的那行数据凭什么消失啊?
------解决方案--------------------
调试,断点打在 
sda.Update(ndt);
这句
看一下你sda的DeleteCommand值是否是正确的delete语句
而且,你只需要ndr.Delete()就可以了
具体你看下你ndr对应的RowState是否标记为删除就知道了
用DataAdapter更新数据库有两个要求
1、有对应的Insert/Update/DeleteCommand
2、相对应的DataRow标记为已增加/修改/删除
------解决方案--------------------
引用:
你都从来没有delete from biao where..
指定的数据库的那行数据凭什么消失啊?

SqlDataAdapter 可以自动创建这些代码。但是要调用SqlDataAdapter.update和SqlCommandBuilder。

还是不推荐这么做,如果数据库设计稍有改动,那这个方法就变摆设。
------解决方案--------------------
你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去
把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除
------解决方案--------------------
如:

DataRow[] 筛选已有数据 = 缓存数据表.Tables["啊啊啊"].Select("_ID ='" + 保存ID.ToString() + "'");

int 缓存表索引 = 缓存数据表.Tables["啊啊啊"].Rows.IndexOf(筛选已有数据[0]);

缓存数据表.Tables["啊啊啊"].Rows[缓存表索引].Delete();/*删除按条件选定的数据行*/

------解决方案--------------------
引用:
Quote: 引用:

你调用Remove后,该行与DataTable就没有任何关系了(DataRowState是Detached,且不可被遍历到),肯定更新不进去
把你的Remove改成 DataRow.Delete(这时DataRowState是Deleted,且可被DataTable.Rows遍历到),然后更新,行会被ado执行实际删除


感谢phommy的关注
请教 http://www.cnblogs.com/jhxk/articles/2328744.html 这篇文章里的删除方法改如何理解呢?网上好多介绍remove和removeat方法的文章,难道是这些文章错了?


用处不同而已
如果只是把DataTable当数据载体用、不回写数据库,一般用Remove;增加Delete方法(只是我觉得,毕竟无法知道微软的人的真正想法)主要目的就是用于你这