C# 如何基于修改的DataContext更新BindingSource

C# 如何基于修改的DataContext更新BindingSource,c#,linq-to-sql,datacontext,bindingsource,C#,Linq To Sql,Datacontext,Bindingsource,在我的应用程序中,我将Linq To SQL DataContext的数据提取到字典中,以便于使用,如下所示: Jobs = dbc.Jobs.ToDictionary(j => j.Id, j => j); 然后我将此词典绑定到BindingSource: bsJob.DataSource = jobManager.Jobs.Values.ToList(); 我定期刷新DataContext和字典,以便在向数据库添加新作业时(无论是直接通过本地应用程序还是通过在不同机器上运行的

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

Jobs = dbc.Jobs.ToDictionary(j => j.Id, j => j);
然后我将此词典绑定到BindingSource:

bsJob.DataSource = jobManager.Jobs.Values.ToList();
我定期刷新DataContext和字典,以便在向数据库添加新作业时(无论是直接通过本地应用程序还是通过在不同机器上运行的应用程序):


如何更新BindingSource以适应更改?

我看不到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

哈,多尴尬啊!当然,我指的是整个过程中的作业,这只是一个愚蠢的复制粘贴错误,因为我用这种方式处理了几个对象,我把代码弄混了。所以没有什么好方法可以做到这一点,只需重新分配为数据源?好的。。。至少我是这样做的。当然,做事通常有多种方式,有些方式比其他方式更有创意。如果它是我的代码,我只需要一个Jobs属性,并在get{}上刷新它。私人工作类别(工作清单);;PublicJobClass JobList{get{{{{uJobList=dbc.Jobs.ToDictionary(j=>j.Id,j=>j);返回{uJobList;}设置{{{uJobList=value;}}},然后您可以将其分配给您的数据源bsJob.DataSource=JobList;我以前使用过这种方法,但我认为缓存作业可能更明智,直到它从数据库刷新(每30秒一次)。如果您每30秒访问属性不止一次,那么我只会在私有属性为null时自动从数据库加载。私人工作类别(工作清单);;公共作业类作业列表{get{if({u JobList==null){u JobList=dbc.Jobs.ToDictionary(j=>j.Id,j=>j);返回{u JobList;}set{{u JobList=value;}}}如果要更新内容,则为私有属性{u JobList=dbc.Jobs.ToDictionary(j=>j.Id,j=>j)分配一个新值;或者我可以分配null并访问该属性,这样我就不必知道从何处或如何更新它,但我仍然可以更新它。好主意,我会的!谢谢
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