【问题标题】:Returning added rows返回添加的行
【发布时间】:2013-02-25 17:52:24
【问题描述】:

我有一个DataGridView,它显示来自SQL table 的数据。它使用sqldependency,以便在数据更改时发出警报,DataGridView 立即显示更新的数据。新行将定期添加到此表中,发生这种情况时,我只想从第一个数据网格中获取那些新行并填充单独的 DataGridView

我已经对RowAdded event 进行了一些试验,但它并不完全简单,因为每当sqldependency 更新网格视图时,它都会为表格中的每一行创建一个警报。

有人做过类似的事情吗?

【问题讨论】:

  • 欢迎来到stackoverflow!和what have you tried?
  • 你能给我们看一些你在做什么的代码吗?

标签: c# winforms datagridview


【解决方案1】:

让我们调用包含所有行的第一个 DataGridView Grid A 和只显示新行的 DataGridView Grid B。不要通过观察网格 A 的变化来定义网格 B 的内容。相反,创建自己的“新行”定义。一种简单的方法是在每次更新期间复制网格 A 的内容(在我们的 SqlDependency 对象的 OnChange 事件中)。然后,在下次更新时,您将能够将行选择到“新行”数据集中。

这是 SqlDependency 对象的 OnChange 处理程序的伪代码(这应该是监视填充网格 A 的 SqlCommand):

  1. 运行一个 SqlCommand,从网格中选择行 带有 NOT IN 子句的数据源排除了名为 LastUpdate 的第二个表中具有 ID 的行(请参见步骤 2)。这将是网格 B 的数据源
  2. 运行 SqlCommand 将 Grid A 数据源的所有行复制到 LastUpdate 表。最简单的方法可能是先删除 LastUpdate 的内容,然后运行以下形式的语句:INSERT INTO LastUpdate(ID) SELECT ID FROM table_x
  3. 正常更新网格A

我要强调的一点是,这种更新策略在数据查询和 UI 之间建立了有效的分离。换句话说,驱动网格 B 的数据在任何方面都不依赖于网格 A。如果你坚持这个原则,你应该会得到一个更易于维护的应用程序。

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 2017-12-22
    • 2014-10-01
    • 2019-11-07
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多