以下是我的情况:
我的Silverlight 4页面中有一个域数据源。我从RIA服务中提取了相关实体,并使用集合视图将它们显示在同一页面上。
在按钮点击事件中,我插入/添加一个实体(请参阅下面的代码段)。
如何刷新数据网格?我做错了什么?
我知道数据正在插入数据库中,无法离开页面并返回时无法刷新网格。
DomainContext ctx = new DomainContext();
foreach (<Entity> x in EntityList)
{
<Entity> y = new <Entity>
{
.... <set values>
};
ctx.<Entity>.Add(y);
}
ctx.SubmitChanges();
DomainDataSource.Load(); ;
CollectionView.View.Refresh();
答案 0 :(得分:3)
尝试更改您的负载以使用RefreshCurrent。
ctx.Load(query,LoadBehavior.RefreshCurrent,GetCategoriesByLevelQuery_Loaded,null);
可用的三种加载行为:
保持当前(默认值):表示客户端上缓存的版本不会随加载操作而更改。实体不会使用新信息进行更新。
合并到当前:如果没有对缓存实体进行任何修改,它将使用加载操作实体进行更新。如果用户将编辑数据,这似乎是最安全的选项,因为用户不希望丢失他们在提交之前输入的数据。
刷新当前:将使用来自加载操作实体的信息更新缓存中的所有实体。这可以覆盖用户已做但未提交的更改。小心这个选项。
答案 1 :(得分:1)
我的问题是在我的domaindatasource添加“外部”。
这是我最终做的事情:
DomainContext ctx = (MyDDS)DomainDataSource.DomainContext; //new DomainContext();
foreach (<Entity> x in EntityList)
{
<Entity> y = new <Entity>
{
.... <set values>
};
ctx.<Entity>.Add(y);
}
ctx.SubmitChanges();
....
private void MyDDS_SubmittedChanges(object sender, SubmittedChangesEventArgs e)
{
MyDDS.Load();
}
不确定这是否是最佳方式,但它对我有用。
答案 2 :(得分:0)
正确的方法是在DomainDataSource.DataView中添加新项,而不是在DomainDataSource.DataContext中添加:
在原始代码中:
DomainDataSource.DataView.Add(y);
这会对分页产生一些影响。新项目将添加到当前页面中,扩展其大小。刷新后,将调整大小。
参考:here