【问题标题】:How to update a BindingSource based on a modified DataContext如何根据修改后的 DataContext 更新 BindingSource
【发布时间】:2009-06-26 12:31:23
【问题描述】:

在我的应用程序中,我将 Linq To SQL DataContext 的数据提取到字典中以便于使用,如下所示:

Jobs = dbc.Jobs.ToDictionary(j => j.Id, j => j);

然后我将这个字典绑定到一个 BindingSource:

bsJob.DataSource = jobManager.Jobs.Values.ToList();

当新作业添加到数据库时(无论是直接通过本地应用程序还是在不同机器上运行的应用程序),我会定期刷新 DataContext 和 Dictionary:

dbc.Refresh(RefreshMode.OverwriteCurrentValues, dbc.Job);
Jobs = dbc.Job.ToDictionary(j => j.Id, j => j);

如何更新 BindingSource 以适应更改?

【问题讨论】:

    标签: c# linq-to-sql datacontext bindingsource


    【解决方案1】:

    我没有看到 Jobs 类与 Customer 类之间的关系,所以我假设您是要键入它而不是 jobManager.Customers.Values.ToList();

    假设您已经有某种触发刷新的事件,因为您提到您“定期”更新,您可以像最初一样为 BindingSource.DataSource 属性分配一个新值。

    dbc.Refresh(RefreshMode.OverwriteCurrentValues, dbc.Customer);
    Customers = dbc.Customer.ToDictionary(c => c.Id, c => c);
    bsJob.DataSource = jobManager.Jobs.Values.ToList();  //Assuming this statement was correct
    

    【讨论】:

    • 哈,好尴尬!当然,我的意思是整个过程中的作业,这只是一个愚蠢的复制和粘贴错误,因为我有几个以这种方式处理的对象并且我混合了代码。所以没有漂亮的方法可以做到这一点,只需重新分配为 DataSource?
    • AFAIK... 至少我是这样做的。当然,通常有多种做事方式,有些方式比其他方式更有创意。如果是我的代码,我只需要一个 Jobs 属性并在 get{} 上刷新它。私有 JobClass _JobList;公共 JobClass JobList { get { _JobList = dbc.Jobs.ToDictionary(j => j.Id, j => j);返回_工作列表; } set{ _JobList = value;} } 然后你可以把它分配给你的 DataSource bsJob.DataSource = JobList;
    • 我以前使用过这种方法,但我认为在从数据库刷新之前缓存作业可能更聪明(每 30 秒刷新一次)。
    • 如果您每 30 秒多次访问该属性,那么我只会在私有属性为空时自动从数据库加载。私有 JobClass _JobList;公共 JobClass JobList { get { if(_JobList == null) _JobList = dbc.Jobs.ToDictionary(j => j.Id, j => j);返回_工作列表; } 设置 { _JobList = 值; } } 如果要更新内容,则为私有属性分配一个新值 _JobList = dbc.Jobs.ToDictionary(j => j.Id, j => j);
    • 或者我可以分配 null 并访问属性,所以我不必知道它从哪里更新或如何更新,但我仍然可以更新它。好主意,我会这样做的!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2012-12-15
    • 2017-07-18
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多