2016-02-29 52 views
1

我正在为WPF写一个研讨会的程序。它使用SQL Server数据库。用户可以在程序中添加或编辑一些数据(新维修,业主和维修人员)。它全部写入数据库。在主窗体中,我有一个显示数据库记录的DataGrid。用于DataGrid的DataSource是从数据库填充的ObservableCollection。两个或多个程序实例与一个数据库

public ObservableCollection<Repair> RepairList { get; set; } 

和构造:

RepairList = new ObservableCollection<Repair>(DbContext.Repair.ToList().OrderByDescending(x => x.Id)); 

一切都OK了,如果我运行该程序的一个实例。但是,如果我启动该程序的第二个或第三个实例并在DB中添加一些记录,会发生什么?我如何更新其他程序实例的DataGrid中的值?我会与记录有任何冲突吗?

+0

搜索您正在使用的数据库的“交易”。 – Gusman

+2

我建议添加一个刷新按钮(和F5键绑定)以允许用户按需刷新数据。我还建议让网格只读,弹出一个单独的对话框进行编辑 - 这样,您可以轻松地重读行,并锁定。 – Zastai

+0

@ Zastai y,我决定同样 – dantey89

回答

0

如何更新其他程序实例的DataGrid中的值?

最简单的方法是为表格创建一个“changed”-timestamp-column,并定期检查,在命令上或在需要时(例如在编辑之前)检查自上次检查后更改的行。当检测到更改时,您可以重新加载ObservableCollection或将条目添加到/从中删除条目。

我会和记录有冲突吗?

是。当两个或更多实例同时编辑一行时,只有最后一个保存的编辑会保留(如果您没有使用某些高级逻辑来合并编辑)。标志列(如“editLock”)可能有帮助
使用程序生成的ID插入时也可能存在冲突,所以我会推荐自动生成的ID。

+0

我想到了定时器,它会每2秒更新一次数据库的集合。这是不好的做法吗? OMEG。 – dantey89

+2

OMG。 。定时器每2秒钟!这会破坏你的应用性能。 @ dantey89 – Gopichandar

+0

@ dantey89我同意,每2秒更新一次 - 尤其是没有必要 - 非常糟糕。大桌上的大多数选择甚至需要更长时间!如果每分钟或甚至更长时间都需要更新,我会**检查** – Breeze

相关问题