【问题标题】:Live data on datagrid for newly added or deleted row in database数据库中新添加或删除行的数据网格上的实时数据
【发布时间】:2011-06-03 21:51:24
【问题描述】:
    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 数据库的表中插入新行或删除行时,datagrid 不会更新该行。

上述函数是刷新数据网格的函数。我想我必须编写 Fetch() 函数来重置绑定或重建数据网格,以便为新添加的行或删除的行更新数据网格。

然后这个函数被后台线程作为委托调用,这样数据网格每300毫秒刷新一次。

【问题讨论】:

    标签: c# .net wpf ado.net binding


    【解决方案1】:

    首先更好的方法是使用 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/

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

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多