在一个form里面,我将一个datatable显示在datagrid里面,下面用一些textbox显示datagrid中选中数据的详细情况,将textbox绑定到datatable的各个字段。在textbox中对datatable数据进行更新的时候这样操作:
在datagrid中选择一条数据-〉在textbox中修改数据-〉在datagrid中选择另一条数据-〉在textbox中修改数据-〉………………直道修改完最后一条需要修改的数据在没有变换当前的焦点的情况下直接关闭窗口。
但是这样操作,每次修改的最后一条数据不能被保存,谁知道是怎么回事?怎样解决?

解决方案 »

  1.   

    在Dispose(){}中写你对最后一条数据的更新
      

  2.   

    在关闭前,调用
    dataGrid.BindingContext[数据源].EndCurrentEdit();
      

  3.   

    我遇到和你同样的问题.
    首先,你其他的行修改没有什么问题,说明你的程序没有问题,当你修改第一行完成后,然后修改第二行,第一行就改变了.但是最后一行修改后,后面没有了,你的光标没有移走,不会把你这行的RowState改变为Updated,不信你修改以后把光标移走,应该就可以了.
      

  4.   

    在批量更新之前调用数据的编辑提交,可以看例子
    http://blog.csdn.net/zhzuo/archive/2005/01/03/238273.aspx
      

  5.   

    你需要使用CurrencyManager类来管理这个问题,在编辑结束之后,或保存之前调用一下
    CurrencyManager.EndCurrencyEdit()就可以了
      

  6.   

    是这样吗?我查查msdn在研究一下。我觉得应该挺简单的,就是我没接触过。
      

  7.   

    试验一下吧,楼主!!!protected void DataGrid1_KeyUp
    (object sender, System.Windows.Forms.KeyEventArgs e) {
        if(e.KeyCode == Keys.Enter) {
            // Enter key pressed.
            CurrencyManager gridCurrencyManager = 
            (CurrencyManager)this.BindingContext
            [dataGrid1.DataSource, dataGrid1.DataMember];
            gridCurrencyManager.EndCurrentEdit();
            MessageBox.Show("End Edit");
        }
    }
      

  8.   

    回复秋枫大虾:
    按照您给的例子,我再最后执行了objMyDataSet.AcceptChanges();,但是最后一条编辑过的数据仍然没有被提交。我再提交以前已经确认了objMyDataSet.AcceptChanges();里面那一条数据就是我需要update的数据,但是在执行完objMyDataSet.AcceptChanges();以后数据库里面还是原来的数据,没有被update。
      

  9.   

    回复古道大虾
    不知道您给的例子这种方法您试验过没有,使用endcurrentedit方法,我通过试验发现还是不能解决问题。
      

  10.   

    如果我使用了数据绑定,不用我写任何的代码就可以实现数据的update,那么对于数据的update是由谁来控制的?我仔细观察了一下,当我编辑一条数据并保存以后,在sql数据库中该数据并没有被更新,只有当我编辑下一条数据并保存后,上一条数据的更新才在sql数据库里面显示出来。这种现象谁能解释一下?
      

  11.   

    dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber + 1, dataGrid1.CurrentCell.ColumnNumber );
    dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber - 1, dataGrid1.CurrentCell.ColumnNumber );在保存之前执行
      

  12.   

    回复风吹大虾
    这个方法没有用,简单的挪一下单元格不起作用。最后我用了一个最笨的办法,就是用sqlcommand来update最后一条记录,就可以搞定了,但是我觉得这纯属是瞎糊弄,应该有正规的方法来解决这个问题。
      

  13.   

    protected void dataGrid1_MouseDown(object sender, MouseEventArgs e){ 
       // Use the HitTest method to get a HitTestInfo object. 
       System.Windows.Forms.DataGrid.HitTestInfo hi;    
       DataGrid grid = (DataGrid) sender; 
       hi=grid.HitTest(e.X, e.Y); 
       // Test if the clicked area was a cell. 
       if(hi.Type==DataGrid.HitTestType.Cell ) { 
           CurrencyManager gridCurrencyManager = 
            (CurrencyManager)this.BindingContext
            [dataGrid1.DataSource, dataGrid1.DataMember];
            gridCurrencyManager.EndCurrentEdit();     
                
       } 
    }
      

  14.   

    BindingManagerBase bm = this.dataGrid1.BindingContext[dataGrid1.DataSource,dataGrid1.DataMember];
    if ( bm.Position == -1 ) 
    return ;
    else
    {
    int row = this.dataGrid1.CurrentCell.RowNumber;
    dataGrid1.CurrentCell = new DataGridCell(row+1,dataGrid1.CurrentCell.ColumnNumber);
    dataGrid1.CurrentCell = new DataGridCell(row,dataGrid1.CurrentCell.ColumnNumber);
    }
      

  15.   

    dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber + 1, dataGrid1.CurrentCell.ColumnNumber + 1 );
    dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber - 1, dataGrid1.CurrentCell.ColumnNumber - 1 ); this.BindingContext[dataSet11,"zbsdb"].EndCurrentEdit();
    这种方法,我试了,好用
      

  16.   

    在你更新语句的尾部加这句变焦点
    this.DataGrid1.EditItemIndex=-1;