是否可以让datagridview在绑定的数据库得到更新时自动更新?

时间:2010-09-22 23:28:45

标签: c# mysql winforms datagridview

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

5 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

这在理论上是可行的,但是非常笨拙并且对于使用数据库感觉不是很原生。一般来说,DB是实时数据的源头。如果你想要实时数据,你应该使用实时推送数据源(其中有很多,主要是针对财务数据)。

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

事件顺序大致如下:

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

答案 2 :(得分:0)

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

无论如何,您应该考虑是否需要此功能,因为它会对数据库效率和网络流量产生巨大影响。

答案 3 :(得分:0)

答案 4 :(得分:-1)

有可能,是的,目前是可取的,可能没有。您正在寻找的技术称为“comet”,是一种服务器推送类型的架构。在网络应用程序中,这违背了目前支持的,可靠的和易于维护的。选项包括从浏览器运行网络服务器并进行回调和持久的xm​​pp对话,但除非你现在绝对需要这种行为,否则它们都不具备吸引力。

HTML 5即将推出web sockets,这样可以使这种理想的行为更容易获得,但可能需要几年时间才会得到广泛的支持。

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