在一个form里面,我将一个datatable显示在datagrid里面,下面用一些textbox显示datagrid中选中数据的详细情况,将textbox绑定到datatable的各个字段。在textbox中对datatable数据进行更新的时候这样操作:
在datagrid中选择一条数据-〉在textbox中修改数据-〉在datagrid中选择另一条数据-〉在textbox中修改数据-〉………………直道修改完最后一条需要修改的数据在没有变换当前的焦点的情况下直接关闭窗口。
但是这样操作,每次修改的最后一条数据不能被保存,谁知道是怎么回事?怎样解决?
在datagrid中选择一条数据-〉在textbox中修改数据-〉在datagrid中选择另一条数据-〉在textbox中修改数据-〉………………直道修改完最后一条需要修改的数据在没有变换当前的焦点的情况下直接关闭窗口。
但是这样操作,每次修改的最后一条数据不能被保存,谁知道是怎么回事?怎样解决?
dataGrid.BindingContext[数据源].EndCurrentEdit();
首先,你其他的行修改没有什么问题,说明你的程序没有问题,当你修改第一行完成后,然后修改第二行,第一行就改变了.但是最后一行修改后,后面没有了,你的光标没有移走,不会把你这行的RowState改变为Updated,不信你修改以后把光标移走,应该就可以了.
http://blog.csdn.net/zhzuo/archive/2005/01/03/238273.aspx
CurrencyManager.EndCurrencyEdit()就可以了
(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");
}
}
按照您给的例子,我再最后执行了objMyDataSet.AcceptChanges();,但是最后一条编辑过的数据仍然没有被提交。我再提交以前已经确认了objMyDataSet.AcceptChanges();里面那一条数据就是我需要update的数据,但是在执行完objMyDataSet.AcceptChanges();以后数据库里面还是原来的数据,没有被update。
不知道您给的例子这种方法您试验过没有,使用endcurrentedit方法,我通过试验发现还是不能解决问题。
dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber - 1, dataGrid1.CurrentCell.ColumnNumber );在保存之前执行
这个方法没有用,简单的挪一下单元格不起作用。最后我用了一个最笨的办法,就是用sqlcommand来update最后一条记录,就可以搞定了,但是我觉得这纯属是瞎糊弄,应该有正规的方法来解决这个问题。
// 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();
}
}
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);
}
dataGrid1.CurrentCell = new DataGridCell(dataGrid1.CurrentCell.RowNumber - 1, dataGrid1.CurrentCell.ColumnNumber - 1 ); this.BindingContext[dataSet11,"zbsdb"].EndCurrentEdit();
这种方法,我试了,好用
this.DataGrid1.EditItemIndex=-1;