C# DataTable.RejectChanges()和刷新表单文本框控件

C# DataTable.RejectChanges()和刷新表单文本框控件,c#,datagridview,C#,Datagridview,我正在学习C#的框架理解。我有一个表单,表单上有简单的添加/编辑、保存/取消(和退出)按钮。表单有一个网格和一个绑定到它的datatable(data table是表单上的一个字段,用于在表单期间保留作用域) 表单上还有3个简单的文本框控件,它们绑定到DataTable中的相应列。当我滚动网格时,文本框详细信息会自动刷新。。。太好了 我添加/取消协调工作正常,但编辑/取消失败。在以下方面失败 我启动表单,网格显示3行(第1列是一个简单的“描述”)。第一行有一个值Test(因此显示表单上相应绑定的

我正在学习C#的框架理解。我有一个表单,表单上有简单的添加/编辑、保存/取消(和退出)按钮。表单有一个网格和一个绑定到它的datatable(data table是表单上的一个字段,用于在表单期间保留作用域)

表单上还有3个简单的文本框控件,它们绑定到
DataTable
中的相应列。当我滚动网格时,文本框详细信息会自动刷新。。。太好了

我添加/取消协调工作正常,但编辑/取消失败。在以下方面失败

我启动表单,网格显示3行(第1列是一个简单的“描述”)。第一行有一个值
Test
(因此显示表单上相应绑定的单个textbox控件)。我单击编辑按钮,现在可以更改单个文本框(而不是数据网格),并将其更改为
测试更改值

所以,现在,我去点击“取消”按钮,并希望以下。。。网格不会使用新值进行更新,单个textbox控件会返回其原始
Test

在Cancel按钮中,我发出了一个
MyDataTable.RejectChanges()
,网格正确地保留了原始的
Test
值,但textbox控件保留了
Test changed值的内容。当我在添加/取消组合过程中调用相同的
RejectChanges()
时,一切都能完美地工作

为了在添加/取消过程中模拟类似的情况,我显式地将网格强制到datatable中的最后一个有效行,这反过来会更新文本框。。。显然,
MyDataGridView.CurrentRow
的调用/重新加载过程中触发了一些我看不到的东西。因为这是一个编辑,所以我不会从表中删除一行(从“添加”中临时删除),然后拒绝(删除),并通过
MyDataGridView.CurrentCell=[0,LastDataRowInDataTable]
强制行更改


任何想法都会很好。

在调用
RejectChanges
后,我试图更新两个控件(一个
日期时间选择器
和一个
文本框
)时,出现了类似的问题。通过调用控件的
BindingSource

的方法
ResetCurrentItem()
解决了这个问题,如果您仍然有兴趣找到这个问题的答案,发布“添加/编辑”和“保存/取消”事件处理程序的源代码将有助于更清楚地了解您试图执行的操作。以下是“我的取消”按钮MyTable.RejectChanges();/”的主要转储如果我们处于添加模式,请始终重置为最后一个If(CurrentMode==AddMode){//count是基于1而不是基于零的上下文If(MyTable.Rows.count>0)//将焦点放在表MyGrid.Rows[MyTable.Rows.count-1]的基于零的行上。Selected=true;//完成,get out return;}无论我在这之后做了什么,文本框不会刷新为预编辑的值