【发布时间】:2015-04-08 11:17:32
【问题描述】:
我有一个应用程序,它有一个主窗体,它有 2 个使用拆分器的面板。顶部面板是一个表单,包含绑定导航器、数据集、绑定源、表格适配器......
底部面板也是一个表单。它基本上只是一个datagridview。当 Mainform 加载时,我将 bindingsource 从顶部表单传递到底部表单。
底部表单采用绑定源,并为其自己的数据源成员使用关系(两个表之间)。
查看数据效果很好。
当我更新主数据时,我会在用户离开记录时捕获它。我使用 bindingsource.EndEdit()、DataSet.HasChanges() 进行验证,然后使用 tableadapter.update 在导航到下一条记录之前写入数据。
这也很好用。
现在,我如何在详细(底部)表单中捕获和写入数据?它只有传入的绑定源。
我有一个部分工作的解决方案,其中顶部表单实际上使用第二个 tableadapter.update 语句来编写子表。但它似乎需要 2 个记录导航才能工作。 (此时数据实际上已正确更新)
有没有更好的高级方法来完成这一切? 谢谢 回复
【问题讨论】:
-
当我导航到下一条记录时,似乎写入被顶部表单捕获 - 如果我在进行更改后更改底部详细表单上的记录。但是,如果我留在更改后的记录上,并导航到顶部表格中的下一个记录,那么它就会延迟。我在 gridview 的 rowvalidation 上触发 EndEdit。也许我也应该在底部表单失去焦点时这样做?
-
实际上.. 如果我停留在底部详细信息网格视图中的已编辑记录上,然后单击顶部表单中的另一个字段,然后导航到顶部表单中的下一个记录,它也会被捕获。因此,仅当我从已编辑的底部记录开始并立即单击导航到下一条记录时,才会出现问题。似乎是时间问题?
-
似乎我确认事件的顺序不是我所期望的。当用户点击底部表单时,我尝试了许多不同的事件来尝试在它的绑定源上调用 EndEdit。但是,每个事件似乎只在顶部表单中单击的事件(即移动记录)之后才被调用,这是我检查 HasChanges 等的地方。我尝试过的底部小程序上的事件是:RowValidating on网格,底部窗体上的离开和网格上的 CellEndEdit。令人惊讶的是,在从顶部小程序单击事件之后,这些都不会被调用!
标签: c# winforms dataset bindingsource tableadapter