有什么方法可以在数据插入数据库后自动更新表单上的控件(例如:datagrid)吗?
是否可以通过C#WinForms实现这一目标?我已经研究过并尝试过有关SignalR的事情,但我并不认为它是我想要/需要的。
感谢。
答案 0 :(得分:2)
假设您的数据库是MSSQL。
我很遗憾地说,但是如果没有使用轮询请求访问SQL DB,就没有办法实现您的目标。您可以在评论中尝试@Cyber Progs所提及的SQLDependency,但我仍然认为这不会有太多好处。但是,嘿,尝试没有害处:)所以去吧。
SQL更像是一种你得到的东西。不是相反。因此,除非您向数据库发出轮询请求以使用timer
或manual refresh
获取所需表的详细信息,否则SQL本身不会将更新传递给您的程序。 / p>
您已尝试离开SignalR
,我建议您使用Timer
+ Multithreading
。除此之外,我没有看到更适合你所需要的方式。
另外一个更方便的选择是使用位于FileSystemWatcher
的{{1}}。
您可以做的是在表格上创建一个System.IO.FileSystemWatcher
,您希望收到通知。
每当运行SQL Trigger
,INSERT
,UPDATE
查询时,此触发器最终不会执行任何操作,只会更改(修改)本地/网络文件。
文件本身在其内容中没有任何内容,只是它的修改日期会在每次DELETE
次运行时发生变化。
您现在可以使用Trigger
在您的应用程序中进行编码,以观察此(本地/网络)文件。如果它被修改,只需对数据库进行快速轮询并获取最新数据。
答案 1 :(得分:1)
我建议使用SignalR和SQL事件监听器。
第1步: 您可以在c#中定义实体模型(有一些工具可以进行逆向工程,这样可以节省您自己编写上下文的时间)。
第2步: 配置SignalR Hub。将所有用户连接存储在对象中,this有一个基本的教程如何做到这一点。
第3步: 然后,您可以覆盖 SaveChangesAsync 方法,在内部进行一些检查以确定是什么样的chanegd以及您感兴趣的模型是否可以触发对SIgnalR hub方法的更改并且将推送所有更改到客户端JS。
在JS中收到它后,您可以对数据网格执行更改。