【问题标题】:Remove record from a datatable when record disappears from a mirrored datatable当记录从镜像数据表中消失时从数据表中删除记录
【发布时间】:2011-04-14 20:15:33
【问题描述】:

我有两个镜像数据表(具有两个主键的相同结构):

  • DataTable_A ---> 绑定到一个datagridView
  • DataTable_B ---> 从数据库中填充

由于 DataTable_B 每 2 秒由一次查询填充到数据库中,因此我需要像 DataTable_B 一样镜像 DataTable_A,避免直接填充 DataTable_A。当一条记录从 DataTable_B 中消失时,我还需要从 DataTable_A 中删除该记录。最好的方法是什么?

现在我正在对 DataTable_B 的每一行执行“for 循环”,如果 DataTable_A 上不存在该行,我将其删除。

有没有更好的方法?

【问题讨论】:

  • 为什么要镜像数据表?另外,您目前如何填充每个 DataTable?您是每 2 秒从数据库中完全刷新 DataTable_B,还是只是拉下更改?
  • 基本上我需要在数据表中反映数据库中的表,然后在 datagridView 中反映,我敢打赌我想在 UI 上没有任何问题。每两秒钟我都会通过数据库查询填充 DataTable_B。

标签: c# .net database datagridview dataset


【解决方案1】:

最好的方法可能是根本没有 TableA,而是在 TableB 上使用 DataView。这将立即解决所有问题。你能详细说明你为什么需要这个副本吗?

但否则你会想要处理 TableB 的 RowChanged 和 TableNewRow RowDeleted 事件


看到您的 cmets 后,一个更一般的想法:如果可以将 Timestamp 列添加到数据库中的表中,您可以运行更有效的查询。 DataTable.Merge 方法将完成剩下的工作。

【讨论】:

  • 我的目标是在datagridView上反映一个数据库表的情况。例如我有这个查询: SELECT field1,field2,field3,field4 FROM table1 WHERE date = '2010-09-20';我需要几乎实时检查数据库上的行是否发生变化并反映 DatagridView 上的情况:例如,如果数据库中的一行被删除,我也需要在 datagridView 上删除它。实际上,datagridView 是数据库表中数据的实时快照。
  • 并在网格中保持“稳定”视图?如果记录数不太大,则可以直接绑定。否则使用事件。
  • 平均记录 1500。但是每两秒在表 B 上用 dataadapter 填充 Datatable,我可以得到真正的 RowDeleted 事件吗?我在每个数据表中都有一个包含时间的字段:HH:MM 和这种格式的数据字段:yyyy-MM-dd。
  • 不,抱歉,RowDeleted 不起作用。而且时间戳也不适用于真正删除的行,您需要一个状态列。
  • Nut 你试过直接绑定到TableB吗? 1500/2esc 听起来并不压倒性
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多