Datagrid不会刷新已更改的数据

有没有办法让datagrid监听数据库并在数据库数据发生变化时自动更新数据? 我使用SQL Server数据库。

如果可能的话,我想使用Linq-2-SQL

因为@Slaggg问:有相当简单的方法可以做到这一点,但它们几乎肯定会涉及大量编码,它会对性能产生相当大的影响,我强烈怀疑它会比它更麻烦。价值。

也就是说,对于典型的n层应用程序,您需要处于非常高的级别:

(1)数据发生变化时通知中间层的方法。 您可以在每个表中使用自定义代码触发器来触发某种通知(可能使用WCF和CLR存储过程),或者您可以使用SqlDependency对象。 可能第二个会更好。

(2)通知连接到该中间层的每个客户端的方法。 假设您正在使用WCF,则需要使用其中一个可用的双工绑定,例如Net.TCP或HttpPollingDuplex(适用于Silverlight)。 您需要确保在客户端和服务器上都正确配置了此项。 您还需要手动跟踪哪些客户端可能对更新感兴趣,以便您可以知道要更新哪些客户端,并且当它们消失或超时时您需要能够从该列表中删除它们。 来自MS WCF团队的Tomek在他的博客上有一些很好的例子,你可能想调查一下。

(3)一旦从中间层获得某些更改的通知,就会更新本地客户端的模型和/或视图模型和/或UI的机制。 这比你想象的要复杂得多:在正常情况下让你的UI与你的数据模型保持同步是很困难的,但是当数据模型也可以从你的另一个方向改变时,它会变得非常复杂。

这些类型的通知背后的想法很简单:但是正确地获取所有细节可能会让你调试到深夜。 从现在开始这两年不得不支持的人会诅咒你的名字。

希望这可以帮助。

这取决于您更新数据库的位置:

  • 从相同的上下文(在Silverlight中,您是否在同一页面上添加,删除,编辑)
  • 来自Silverlight应用程序中的ChildWindow
  • 来自Silverlight应用程序之外的外部非相关工具