Datagrid不会刷新已更改的数据

时间:2010-05-30 14:56:36

标签: c# sql-server silverlight datagrid wcf-ria-services

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

我想尽可能使用Linq-2-SQL

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

希望这有帮助。

答案 1 :(得分:1)

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

  • 来自相同的背景(在 Silverlight,你在加, 删除,在同一页面上编辑)
  • 来自你的儿童窗口 Silverlight应用程序
  • 来自 外部,非相关工具,外部 您的Silverlight应用程序