【问题标题】:is it possible to have a datagridview automatically update when the database it is bound to gets updated?当绑定到的数据库更新时,是否可以自动更新datagridview?
【发布时间】:2011-04-16 00:29:01
【问题描述】:

我有一个 C# winforms 应用程序,它有一个 datagridview 来显示 mySQL 数据库中表的内容。是否可以让 datagridview 实时反映对数据库的更改?即当我直接对表格进行更改时,它将在 datagridview 中显示更改

【问题讨论】:

    标签: c# mysql winforms datagridview


    【解决方案1】:

    查看 BindingSource 和 INotifyPropertyChanged(针对您的对象)。

    MSDN: How to: Raise Change Notifications Using a BindingSource and the INotifyPropertyChanged Interface

    【讨论】:

      【解决方案2】:

      简短的回答是否定的。您必须实现某种轮询机制。

      如果此功能对您的应用程序非常重要,SQL Server 2008 R2 有一项称为StreamInsight 的技术,允许您在数据库级别观察数据流(甚至在它到达磁盘之前)并触发事件,理论上可以使用一种机制来触发应用程序中的更新。我相当肯定 MySQL 不包含类似的技术。

      这些也只是“近乎实时的”。我猜你的意思是你希望数据网格在有新数据时更新,这不是实时的。

      【讨论】:

        【解决方案3】:

        理论上是可行的,但是非常笨拙,感觉不太适合使用数据库。一般来说,数据库是实时数据的重要来源。如果你想要实时数据,你应该使用实时推送数据源(有一大堆,主要针对财务数据)。

        我已经使用更新触发器和本机存储过程实现了一个系统(在 SQL 服务器中,而不是 MySQL,但也许您可以这样做)。本机存储过程只是一个非托管代码 DLL,它实现了某个接口并且可以从 SQL 触发器中调用。

        事件的先后顺序大致如下:

        1. 托管代码使用FileSystemWatcher 在文件系统上打开一个约定的文件(我们称之为“监视”文件),并在文件更改时设置回调。
        2. 更新触发器触发并调用本机存储过程。
        3. 本机存储过程“接触”监视文件,更新其数据修改字段。
        4. FileSystemWatcher 触发回调,之后我们知道数据已更改,因此我们从数据库中重新加载它。

        【讨论】:

          【解决方案4】:

          你不能以简单的方式做到这一点。但是有一个 SqlDependency 类 (link) 可以使用,但不能与 mySQL 一起使用。如果有人对此感兴趣,(here) 是 SQL Server 文档的另一个链接。

          无论如何,由于对数据库效率和网络流量的巨大影响,您应该真正考虑是否需要此功能。

          【讨论】:

            【解决方案5】:

            这是可能的,是的,目前是可取的,可能不是。您正在寻找的技术称为“comet”,是一种服务器推送类型的架构。在网络应用程序中,这与当前支持的、可靠且易于维护的内容背道而驰。选项包括从浏览器运行网络服务器并进行回调和持久的 xmpp 对话,但除非您现在绝对需要这种行为,否则这些都不是真正有吸引力的。

            HTML 5 与 web sockets 一起提供,这应该会使这种理想行为更容易获得,但可能需要几年时间才能获得广泛支持。

            考虑使用 ajax 轮询 Web 服务并进行选择性的部分页面刷新,而不是实现真正的 http 推送架构。

            【讨论】:

            • 他说的是 Winforms,而不是 Webforms。
            • 哎呀......我的回答完全不相关:(
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-09
            • 1970-01-01
            • 1970-01-01
            • 2013-05-17
            相关资源
            最近更新 更多