【问题标题】:Handling Detail updates in Master-Detail view in Winform C#在 Winform C# 中处理 Master-Detail 视图中的详细信息更新
【发布时间】: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


【解决方案1】:

看起来这可能是事件顺序的一般问题..或者它可能特定于绑定导航器或我的设置..但是为了在顶部小程序中更改记录之前触发底部表单的事件(当直接从底部的修改网格行单击到导航器),我必须首先在该顶部小程序事件中明确移动焦点。就我而言,我捕获了导航器上的任何点击,然后运行 ​​this.focus();这导致所有底部表单事件在继续之前触发。然后,这允许我在顶部表单中的 haschanges() 检查在底部表单中的 bindingsource.endedit 之后发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多