保存按钮代码:
 private void bt_save_Click(object sender, EventArgs e)
  {
  DataSet ds = new DataSet();
  SqlDataAdapter myAdapter=new SqlDataAdapter();
  ds=da.UpdateByDataSet(ds, "financetable");
  myAdapter.Update(ds, "financetable");
  dataGridView1.DataSource = ds.Tables["financetable"];
  }UpdateByDataSet代码:
public DataSet UpdateByDataSet(DataSet ds,string tbname)
{   
  SqlCommand myCommand = new SqlCommand("select * from financetable", conn);   
  SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand );   
  SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
  myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
  myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();
  myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();
  DataTable tb = null;
  tb = ds.Tables["financetable"];   
  try
{
  conn.Open();
  myAdapter.Fill(ds,"financetable");
  myAdapter.Update(ds, "financetable");   
  ds.GetChanges();
  ds.AcceptChanges();
  conn.Close();
 }
  catch(Exception err)
{
  err.ToString();
  conn.Close();  
}
  return ds;
}哪里出问题了,貌似是datagridview数据改变后,dataTable值没有变化,要怎么修改?

解决方案 »

  1.   

    代码不是很完整,da是什么?——da.UpdateByDataSet(ds, "financetable");
      

  2.   

    private data da=new data();
    data是我自己定义的数据库类
      

  3.   

    private SqlDataAdapter dataAdapter;
    private DataTable dt;       void Bind()
            {
                SqlConnection connection = new SqlConnection();
                string connectionString = "server=.;uid=sa;pwd=sa;database=QiDian10";
                connection.ConnectionString = connectionString;
                dataAdapter = new SqlDataAdapter("select  * from NewsInfo", connection);
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);
                dt = new DataTable("NewsInfo");
                dataAdapter.Fill(dt);
                dataGridView1.DataSource = dt;
            }private void bt_save_Click(object sender, EventArgs e)
      {
        
        dt=(DataTable)dataGridView1.DataSource;
        dataAdapter.Update(dt);
        
      }
      

  4.   

    引用 3 楼 wangchangming 的回复:
    //声明类级变量 这代码咱看了熟悉
    private SqlDataAdapter dataAdapter;
    private dataset ds;//查询数据并绑定datagridview
    public DataSet UpdateByDataSet(DataSet ds,string tbname)
    {   
      SqlCommand myCommand = new SqlCommand("select * from financetable", conn);   
      myAdapter = new SqlDataAdapter(myCommand );   //
      SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
      myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
      myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();
      myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();
      try
    {
      conn.Open();
      myAdapter.Fill(ds,"financetable");
      conn.Close();
      dataGridView1.DataSource = ds.Tables["financetable"];
     }
      catch(Exception err)
    {
      err.ToString();
      conn.Close();   
    }
      return ds;
    }
    //保存按钮代码:网速咱这么卡..回复不了
     private void bt_save_Click(object sender, EventArgs e)
      {
        myAdapter.Update(ds, "financetable");  //这样就可以把数据库更新了...
      }
      

  5.   

    //查询数据并绑定datagridview 
    public void bt_select_Click(object sender, EventArgs e)
    {   
      SqlCommand myCommand = new SqlCommand("select * from financetable", conn);   
      myAdapter = new SqlDataAdapter(myCommand ); //
      SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
      myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
      myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();
      myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();
      try
    {
      conn.Open();
      myAdapter.Fill(ds,"financetable");
      conn.Close();
      dataGridView1.DataSource = ds.Tables["financetable"];
     }
      catch(Exception err)
    {
      messagebox.show(err.ToString());
      conn.Close();   
    }
    }
      

  6.   


    //昨天就发过关于这个问题的贴的,还没解决
    dataGridView1.DataSource = ds.Tables["financetable"];
    不能放在那段代码里吧
    按你的代码,找不到table“financetable”,会报错的
      

  7.   

    人家那个表名是newinfo,怎么可以通过financetable找到呢。哈哈
      

  8.   

    我的vs调试功能没有了,只要开调试,就弹出内存不能read的对话框
      

  9.   

    //唉..LZ再复制我的代码试下,我以前是用这种方法没问题的,private SqlDataAdapter dataAdapter;
    private dataset ds=new dataset();//点击查询按钮 查询数据并绑定datagridview  这里是一个点击查询的动作
    public void bt_select_Click(object sender, EventArgs e)

      SqlCommand myCommand = new SqlCommand("select * from financetable", conn);   
      myAdapter = new SqlDataAdapter(myCommand ); 
      SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
      myAdapter.InsertCommand = myCommandBuilder .GetInsertCommand();
      myAdapter.UpdateCommand = myCommandBuilder .GetUpdateCommand();
      myAdapter.DeleteCommand = myCommandBuilder .GetDeleteCommand();
     ds.clear();
      try
    {
      conn.Open();
      myAdapter.Fill(ds,"table");
      conn.Close();
      dataGridView1.DataSource = ds.Tables["table"];
     }
      catch(Exception err)
    {
      messagebox.show(err.ToString());
      conn.Close();   
    }
    }
    //点击保存按钮
     private void bt_save_Click(object sender, EventArgs e)
      {
        myAdapter.Update(ds, "table"); //这样就可以把数据库更新了...
      }
      

  10.   

    我刚才试了哈,没有问题,不过如果要更新的表没有主键的话,就不能成功了。
    另外,这个只适合对表操作,如果datasource是多个表的组合的话,也不能成功。
      

  11.   

    这是RowState的状态没改过来,所以update更新不倒