C# 返回添加的行

C# 返回添加的行,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个DataGridView,它显示SQL表中的数据。它正在使用sqldependency,以便在数据更改时发出警报,DataGridView立即显示更新的数据。新行将定期添加到此表中,当这种情况发生时,我只希望从第一个数据网格中获取这些新行,并填充一个单独的DataGridView 我尝试了一点RowAdded事件,但它并不完全简单,因为每当网格视图被sqldependency更新时,它都会为表中的每一行创建一个警报 有人做过类似的事情吗?让我们调用第一个DataGridView,其中包含

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

我尝试了一点
RowAdded事件
,但它并不完全简单,因为每当网格视图被
sqldependency
更新时,它都会为表中的每一行创建一个警报


有人做过类似的事情吗?

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

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

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

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

    欢迎使用stackoverflow!还有?你能给我们看看你在做什么的代码吗?