![](/img/trans.png)
[英]WPF DataGrid - How to automatically set EditMode on a newly added row?
[英]Live data on datagrid for newly added or deleted row in database
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 数据库创建的实体数据表 model。 数据库中的表会定期更改。 所以我的程序的目标是在数据网格上显示实时数据。 我的程序运行良好,除了新的或删除的行之外,还可以显示实时数据。 当在 SQL 数据库中的表中插入新行或删除行时,数据网格不会更新该行。
上面的function就是刷新数据网格的function。 我想我必须编写 Fetch() function 来重置绑定或重建数据网格,以便为新添加的行或删除的行更新数据网格。
然后这个 function 被后台线程作为委托调用,以便每 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/
然后你只需要确保你没有在 memory 中缓存任何东西,并且每次都从数据库表中重新加载数据。 如果您不想拉出所有整个表(这可能需要一段时间,具体取决于大小),您始终可以设置某种更改表,以跟踪自上次检查以来更新、添加或删除的记录和然后只需提取这些记录的数据或从 memory 中删除已删除的数据。
希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.