【问题标题】:C# form dataset get data after child form closesC#表单数据集在子表​​单关闭后获取数据
【发布时间】:2012-04-11 16:59:17
【问题描述】:

我正在使用 sql server、windows 窗体和数据集进行项目。 假设我有一个带有 datagridview 的主表单和一些其他 win 表单控件,通过绑定源绑定到数据集中的数据表。我希望从这个表单打开另一个表单,我希望在其中编辑前一个表单中的一些数据。 我使用 showdialog 方法等待表单关闭,然后我希望在主表单(此时的当前表单)中重新同步数据。

我使用了 this.mydataset.AcceptChanges(); this.mydataset.GetChanges() 并且它们都没有接缝来完成这项工作,我有点卡住了。

有什么想法吗?

【问题讨论】:

  • 因为DataSet是引用类型,只传回相同内存的引用。当您的子表单关闭时,它会失去焦点(生命周期/收集的垃圾),因此所做的更改将丢失。我建议将主(父)表单数据集传递给子表单并更改其内容。

标签: c# .net winforms data-binding dataset


【解决方案1】:

DataSet.GetChanges 将为您提供数据集上未提交的内存更改,它不会从数据库中获取更改。 http://msdn.microsoft.com/en-us/library/a4ey25we.aspx

DataSet.AcceptChanges 方法会将您在数据集中修改的记录标记为未修改。 http://msdn.microsoft.com/en-us/library/system.data.dataset.acceptchanges.aspx

在提交子表单以刷新您的数据后,您必须从 db 重新查询您的数据。

【讨论】:

    【解决方案2】:

    将父表单中的Dataset 作为参数传递给子表单的构造函数,并在子表单中保留一个表单级别的Dataset 变量,该变量指向(初始化)该构造函数参数。

    对子表单中的数据集进行更改,并确保您不会丢弃此子表单Dataset 变量(指向父表单中的相同数据集变量)。

    在子窗体中使用AcceptChanges() 方法接受数据集更改,当您的子窗体关闭时,将父窗体的网格/控件与父窗体中存在的原始数据集重新绑定,更改将在父窗体中可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 2020-05-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2016-04-07
      相关资源
      最近更新 更多