C# WINFORM编程,我界面上的datagridview控件绑定到了某个datatable。现在的问题是,我在界面上更改了datagridview的某cell内容,此时如果没有移动到datagridview的下一行,则在保存时无法保存我刚才做的更改,因为对应的datatable的rowstate为unchanged,请高手赐教,我应该怎么做才能在不换行的情况下保存我的更改呢?

解决方案 »

  1.   

    DataGridView.OnCellValueChanged事件里将更新提交。
      

  2.   

    能写写大概的代码吗?如果绑定的是一个文本框不是datagridview呢?
      

  3.   

    那就TextChanged事件里写。不过没必要每输入一个字符就操作一次数据库。
    代码嘛,就用Sqlcommand执行update语句就是了。
      

  4.   

    还是没有明白我的意思,datatable绑定到了控件,绑定用过吗?控件更改了会自动同步到datatable,然后更新datatable到数据库。现在的问题是更新数据表时,sqldataadapter会检查每datarow的rowstatic,只有added/deleted,changed这些才会更新到数据库,而如果我在修改的时候,没有移动到下一行,数据表的行状态是没有变化的,这时候去保存就保存不了刚才所做的更改。
      

  5.   

    我当然知道你的意思,rowstate我用得多了。你要不换行就更新,只能手动的更新数据源。
      

  6.   

    DataSourceUpdateMode设置为OnPropertyChanged了,更新到数据源是自动的,即使不换行数据源对应的内容也是跟着控件一起更新的,我现在的问题是数据源(就是datatable)某个column内容变化了,如果不换行,它的rowstatic没有变化,这种情况下应该怎么更新到数据库?
      

  7.   

     connection1.Open();
     string sql = "delete * from AddjeInfo where id like '" + ds.Tables["AddjeInfo"].Rows [dataGridView1.CurrentCell.RowIndex][0].ToString().Trim() + "'";
     OleDbCommand cmd = new OleDbCommand(sql, connection1);
     cmd.ExecuteNonQuery();
     connection1.Close();
      

  8.   

    不太明白楼上的意思。
    现在发现如果是绑定到datagridview没有问题,如果绑定到textbox则不行,无法保存更改的内容,查了一下,好像要用到bindmanagerbase,没有整明白。
      

  9.   

    自己搞定。其实很简单,就是在文本框的validated中结束当前绑定的编辑状态BindingContext[xxx].EndCurrentEdit().唉,看来社区真的没有几个真正熟悉C#编程的,高手都在忙吧估计。
      

  10.   

    dxiuquan 兄弟我的还没搞定啊。我点保存按钮后执行dataGridView1.EndEdit();后没有效果啊。