SqlConnection cn = DataBase.CreateSql();
            DataTable dt=(DataTable)dgv.DataSouse
            SqlDataAdapter da = new SqlDataAdapter("select * from salebook",cn);
            SqlCommandBuilder builder = new SqlCommandBuilder(da);
            da.Update(dt);
            //dgv.Update();

解决方案 »

  1.   

    楼上的兄弟谢谢了。可是你给的代码必须放在一个专门用来更新的按钮里面才能用。
    在CellEndEdit事件里一样不能更新。请问一下是怎么回事。
      

  2.   

    没大看懂你说的什么,如果更新出错,就在你那 sql 语句 和db.GetUpdate(sql) 方法里找原因吧
      

  3.   

    MARK
      

  4.   


    SqlConnection cn = DataBase.CreateSql(); 
                DataTable dt=(DataTable)dgv.DataSouse 
                SqlDataAdapter da = new SqlDataAdapter("select * from salebook",cn); 
                SqlCommandBuilder builder = new SqlCommandBuilder(da); 
                da.Update(dt); 
    我是说上面这段代码,发到CellEndEdit事件里就不能更新了。也不报错。
    我要做到的是,单元格结束编辑就立即更新。
    如果是另外放一个按钮用来更新,这段代码就可以实现了。
      

  5.   

    谢谢,自己搞定了。
    但是还有不解的地方,请各位帮忙解释一下。
    DataTable dt = (DataTable)dgv.DataSource;//这样写是什么意思?
    如果在CellEndEdit事件里必须加上da.UpdateCommand = builder.GetUpdateCommand();才可以执行,为什么?
      

  6.   

    DataTable dt = (DataTable)dgv.DataSource;//这样写是什么意思? 将GRIDVIEW的数据源(就是你邦定的数据)转换成DATATABLE
      

  7.   

    datagridview 的rowindex是从0开始的。
    但是数据库里的主键ID是1开始的自增长列。
    现在更新的时候,总是要修改完下一个单元格才能提交上一个修改的值。
      

  8.   

    DataTable dt = new DataTable();
    这个dt只是DataTable类的一个实例
    da.Update(dt)
    da拿到一个'空'的DataTable实例 它知道更新谁去?你可以这样写
    DataTable dt = new DataTable();
    da.Fill(dt);
      

  9.   

      SqlConnection cn = DataBase.CreateSql();
                DataTable dt=new DataTable();
                SqlDataAdapter da = new SqlDataAdapter("select * from salebook",cn);
                SqlCommandBuilder builder = new SqlCommandBuilder(da);
                //da.Update(dt);
                dgv.Update();
            }