【问题标题】:DataTable.RejectChanges() and refreshing form textbox controlsDataTable.RejectChanges() 和刷新表单文本框控件
【发布时间】:2010-10-18 05:12:54
【问题描述】:

我正在研究 C# 中的框架理解。我有一个表单,表单上有简单的添加/编辑、保存/取消(和退出)按钮。表单有一个网格和一个绑定到它的数据表(数据表是表单上的一个字段,用于在表单期间保留范围)。

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

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

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

所以,现在,我点击“取消”按钮并希望得到以下结果... 网格不会使用新值进行更新,并且单个文本框控件会返回其原始 Test 值。

在取消按钮中,我发出MyDataTable.RejectChanges(),网格正确地保留了原始Test 值,但文本框控件保留了Test changed value 内容。当我在添加/取消组合期间有同样的RejectChanges() 调用时,一切正常。

为了在添加/取消过程中模拟类似的情况,我明确地将网格强制到数据表中的最后一个有效行,这反过来又更新了文本框......显然,@987654329 的调用/重新加载过程中的某些内容@被触发做了一些我看不到的事情。由于它是 EDIT,因此我不会从表中删除一行(从“添加”临时删除),然后拒绝(删除),并通过 MyDataGridView.CurrentCell = [0, LastDataRowInDataTable] 强制更改行。

任何想法都会很棒。

【问题讨论】:

  • 如果您仍然有兴趣找到此问题的答案,发布您的 Add/Edit 和 Save/Cancel 事件处理程序的源代码将有助于更清楚您正在尝试做什么。跨度>
  • 这是我的取消按钮 MyTable.RejectChanges() 的主要转储; // 如果我们处于添加模式,总是重置为 LAST if (CurrentMode == AddMode) { // 计数是基于 1 而不是基于零的上下文 if (MyTable.Rows.Count > 0) // 聚焦到零- 基于行的表 MyGrid.Rows[MyTable.Rows.Count - 1].Selected = true; // 完成,退出 return; } 无论我在此之后做了什么,文本框都不会刷新到预先编辑的值

标签: c# datagridview


【解决方案1】:

在调用RejectChanges 后尝试更新两个控件(DatetimepickerTextbox)时,我遇到了类似的问题。通过调用控件BindingSource的方法ResetCurrentItem()解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2012-03-07
    • 1970-01-01
    相关资源
    最近更新 更多