返回添加的行

时间:2013-02-25 05:31:20

标签: c# winforms datagridview

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

我已经使用RowAdded event进行了一些实验,但它并不完全是直截了当的,因为每当网格视图由sqldependency更新时,它都会为表中的每一行创建一个警报。

有没有人有经验做类似的事情?

1 个答案:

答案 0 :(得分:1)

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

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

  1. 运行SqlCommand,从Grid A数据源中选择具有NOT IN子句的行,该子句在名为 LastUpdate 的第二个表中排除具有ID的行(请参阅步骤2)。这将是Grid B的数据源
  2. 运行SqlCommand,将Grid A数据源的所有行复制到LastUpdate表。最简单的方法是先删除LastUpdate的内容,然后运行以下格式的语句:INSERT INTO LastUpdate(ID) SELECT ID FROM table_x
  3. 通常更新网格A
  4. 我想强调的是,此更新策略可以在数据查询和UI之间创建有效的分离。换句话说,驱动网格B的数据绝不依赖于网格A.如果你坚持这个原则,你最终应该有一个更易于维护的应用程序。