数据库中新添加或删除行的数据网格上的实时数据
本文关键字:数据 数据网 网格 实时 删除行 新添加 添加 数据库 | 更新日期: 2023-09-27 17:58:18
public void RefreshEntities(object sender)
{
for (; ; )
{
try
{
//refreshing entities will not add new rows added so datagrid needs to be recreated
if (isChanged())
{
Fetch(); //Reset binding or reconstruct data grid
networkEntityTracker = pLCSignilinxEntities.SIGNILINX_NETWORK.ToList().Count;
systemEntityTracker = pLCSignilinxEntities.SIGNILINX_SYSTEM.ToList().Count;
tagEntityTracker = pLCSignilinxEntities.SIGNILINX_TAG.ToList().Count;
}
pLCSignilinxEntities.Refresh(System.Data.Objects.RefreshMode.StoreWins, pLCSignilinxEntities.SIGNILINX_NETWORK);
pLCSignilinxEntities.Refresh(System.Data.Objects.RefreshMode.StoreWins, pLCSignilinxEntities.SIGNILINX_SYSTEM);
pLCSignilinxEntities.Refresh(System.Data.Objects.RefreshMode.StoreWins, pLCSignilinxEntities.SIGNILINX_TAG);
}
catch (Exception ex)
{
MessageBox.Show("Unable to refresh.");
}
Thread.Sleep(300);
}
}
我有一个从数据源拖动的数据网格。数据网格对应于从SQL数据库创建的实体数据模型的表。数据库中的表会定期更改。因此,我的程序的目标是在数据网格上显示实时数据。我的程序显示除新行或删除行以外的实时数据时运行得很好。当在SQL数据库的表中插入新行或删除某行时,数据网格不会更新该行。
上述函数是刷新数据网格的函数。我想我必须编写Fetch((函数来重置绑定或重建数据网格,以便为新添加的行或删除的行更新数据网格。
然后,后台线程作为委托调用此函数,以便每300毫秒刷新一次数据网格。
一个更好的方法是使用Threading.Timer,而不是睡眠的无限循环。
http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
或者,如果您有访问权限,您可以设置Sql依赖项,以便在每次更新、添加或删除数据时激发更改事件。尽管对我来说,这从来都不是很好,我最终只是自己滚动。但这里有一些关于sql依赖的内容
http://www.dreamincode.net/forums/topic/156991-using-sqldependency-to-monitor-sql-database-changes/
然后,您只需要确保没有在内存中缓存任何内容,并且每次都从数据库表中重新加载数据。如果你不想拉取整个表(这可能需要一段时间,具体取决于大小(,你可以随时设置某种更改表,跟踪自上次检查以来更新、添加或删除的记录,然后只拉取这些记录的数据,或者从内存中删除已删除的记录。
希望这能帮你一点忙。