【问题标题】:Datagrid doesn't refresh on changed dataDatagrid 不会刷新更改的数据
【发布时间】:2010-05-30 14:56:35
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    这类通知背后的想法很简单:但正确处理所有细节可能会让您一直调试到深夜。两年后必须支持这一切的人会诅咒你的名字。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      这取决于您从哪里更新数据库:

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

      【讨论】:

      • 很高兴您提出这个问题,并且很抱歉没有首先提供该信息。我的 silverlight 应用程序包含一个 tabcontrol,其中包含 UC 我考虑实现一个 ITabUserControl 接口,该接口具有 updateonselected 方法,然后在每次选择选项卡时更新 ui。会有很多客户端,所以我认为SqlDependencies会导致负载过重。你们觉得怎么样?
      • 我猜你必须考虑“x 个用户在每个 z 时间点击 y-tabs”。如果你有相当多的客户点击你的标签,我认为你将有大量的流量来回移动,具体取决于所需的数据量。假设您意识到这一点,如果您有足够大的硬件来备份流量,这将产生我认为 SelectedTabChanged 方法没有问题,尽管是网络,但我更喜欢 pagechange 而不是 tabchange 来呈现新数据,用户更习惯于看到新数据。你考虑过刷新按钮吗?
      • 这似乎根本无法回答问题。我很震惊,这是一个公认的答案。仍然想知道 - 当某些外部工具写入数据库时​​,如何让我的数据网格更新?
      • @Slaggg 首先,谢谢你的巨魔,其次,他 2-3 个月没有收到任何回复,所以他可能只是很高兴有人真的愿意尝试帮帮忙,给了我一点。最后;我确实提出了进一步的问题以继续提供帮助,但从未得到答复,因此我没有进一步详细说明该主题;由于您如此积极和建设性,我现在也不打算这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多