【问题标题】:Refreshing A CollectionViewSource On A Button Click?在按钮单击时刷新 CollectionViewSource?
【发布时间】:2019-09-23 18:33:32
【问题描述】:

在学习 WPF 时,当我开始为 Microsoft's VS Docs 的 NorthWind 等示例数据库开发用户界面时,我想出了一个查看刷新代码片段,例如:

custViewSource.View.Refresh();

但我意识到,如果对同一数据库的数据进行更改,我无法在将上述相同的行添加到按钮单击事件时加载更改?

假设我开始调试所述项目,但同时,在所述项目运行时,我通过 SSMS 或链接到所述项目的 Access Front-End 更改了客户的名称Northwind 的数据库,然后单击所述新按钮并触发:

custViewSource.View.Refresh();

不反映新名称?

我不知道的原因加上解决方案是,如果用户之间共享单个数据库,那么如果记录已被一个更新,如何在单击按钮时通知其他用户而不是再次执行相同的任务?

我对 WPF 的壮丽世界完全陌生。

感谢您的所有帮助。

【问题讨论】:

    标签: c# wpf data-binding collectionviewsource


    【解决方案1】:

    在内存视图上调用 Refresh() 不会查询数据库中的新数据。您需要以某种方式自己发出 SQL 命令,例如,与最初填充 CollectionViewSource 时的方式相同。

    如果您使用的是实体框架,您可以在DbSet 上调用ToList(),并将Source 属性设置为从数据库返回的新项目列表:

    custViewSource.Source = context.Customers.ToList();
    

    CollectionViewSource 对象和远程数据库之间确实没有联系。视图仅包含您填充其源集合的数据(这些数据可能来自数据库,但视图并不真正关心),并且您有责任编写适当地更新此数据的代码。

    【讨论】:

    • 感谢您的回复 mm8。但是,正如您在 MS 的上述示例中看到的那样,本地副本是在初始化阶段或在 Windows 加载事件中设置的,如何在 btn_click 事件中执行相同操作?换句话说,再次刷新/重新加载整个视图?无论如何都非常感谢您的澄清。
    • @FarazAhmedQureshi:如果您使用的是 EF,您只需在 DbSet 上调用 ToList() 并将 Source 属性设置为从数据库返回的新项目列表:custViewSource.Source = context.Customers.ToList();
    • @FarazAhmedQureshi:你试过这个吗?
    • 是的!但是没有成功!我还没有找到的唯一方法是关闭并重新加载所述表单以刷新数据源。虽然在按钮舔事件上分配相同的代码也不起作用。
    猜你喜欢
    • 2014-12-25
    • 2014-04-10
    • 1970-01-01
    • 2012-01-31
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多