数据库中新添加或删除行的数据网格上的实时数据

本文关键字:数据 数据网 网格 实时 删除行 新添加 添加 数据库 | 更新日期: 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/

然后,您只需要确保没有在内存中缓存任何内容,并且每次都从数据库表中重新加载数据。如果你不想拉取整个表(这可能需要一段时间,具体取决于大小(,你可以随时设置某种更改表,跟踪自上次检查以来更新、添加或删除的记录,然后只拉取这些记录的数据,或者从内存中删除已删除的记录。

希望这能帮你一点忙。