you have to use Adapter to update the databaseSqlDataAdapter da = ....;
da.Update(YourDataSet);
YourDataSet.AcceptChanges();

解决方案 »

  1.   

    //sqlda 是SqlDataAdapter,dt 是DataSet,person是表的名字
    try
    {
    sqlDa.Update(dt.GetChanges(),"person")); 
    myTran.Commit();
    return true;
    }
    catch(System.Data.SqlClient.SqlException ex)
    {
    myTran.Rollback();
    return false;

    finally
    {
    conn.Close();
    }
    //最后加一句这个,下一次删除时就不用再更新这条啦
    dt.Tables[0].AcceptChanges();
      

  2.   

    但是你们说的并不能实现我选中一行再按delete键就不删除那一列雅!?
      

  3.   

    我想各位大虾误会了我的意思,我要实现的是:选中datagrid中的一行,然后按delete键,datagrid表格中的那一行不会有什么反映!
    另外,我如果要这个功能起作用,那么应该把
    SqlDataAdapter da = ....;
    da.Update(YourDataSet);
    YourDataSet.AcceptChanges();
    写在什么事件里面???
      

  4.   

    seehttp://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp#q889q
    public override bool PreProcessMessage( ref Message msg ) 
     

     
         Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode; 
     
         if(msg.Msg == WM_KEYDOWN 
     
              && keyCode == Keys.Delete 
     
              && ((DataView) this.DataSource).AllowDelete) 
     
         { 
               //这里          if(MessageBox.Show("Delete this row?", "", MessageBoxButtons.YesNo) == DialogResult.No) 
              
     
                   return true; 
     
         } 
     
         return base.PreProcessMessage(ref msg); 
     

     
      

  5.   

    WM_KEYDOWN这里报错:
    :名称“WM_KEYDOWN”在类或命名空间“abc.Form2”中不存在
      

  6.   

    add the following in your class declaration:const int WM_KEYDOWN = 0x100; 
    const int WM_KEYUP = 0x101; 
     
      

  7.   

    开始的时候报错:不存在this.DataSource的定义,所以我改为了this.dataGrid1.DataSource
    ,改了以后,这段函数根本就部起作用?设置断点在if语句那里,运行程序,选中datagrid的一行,然后再按delete键,发现程序根本就不会到达那里???
    麻烦了!!!
      

  8.   

    我的数据源不是DataView,所以我把((DataView) this.DataSource).AllowDelete去掉了,可是还是没有反应?
      

  9.   

    PreProcessMessage函数应该放在哪个事件里面?参数改怎么给?麻烦麻烦!我刚学c#!