2010-12-15 71 views
1

这是我的情况:Silverlight 4与RIA Services - 刷新Datagrid绑定到CollectionView

我在我的Silverlight 4页面中有一个域数据源。我从RIA服务中提取了相关实体,并使用collectionview将它们显示在同一页面上。

在按钮单击事件中,我插入/添加实体(请参阅下面的代码片段)。

如何获取datagrid刷新?我究竟做错了什么?

我知道数据正在插入到数据库中,只是无法在不离开页面并返回的情况下刷新网格。

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

可能是值得研究'INotifyCollectionChanged' – 2010-12-15 20:31:23

回答

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(); 
} 

不知道这是做它的最佳方式,但它为我工作。

3

尝试更改负载以使用RefreshCurrent。

ctx.Load(query,LoadBehavior.RefreshCurrent,GetCategoriesByLevelQuery_Loaded,null);

可用的三个负载行为:

保持当前(默认):是指在客户端上缓存的版本不与负荷运转改变。实体不会被更新为新的信息。

合并到当前:如果没有对缓存实体进行修改,它将使用加载操作实体进行更新。如果用户将编辑数据,这似乎是最安全的选择,因为用户不希望丢失他们在提交之前输入的数据。

刷新当前:缓存中的所有实体将使用来自加载操作实体的信息进行更新。这有可能覆盖用户已做出但未提交的更改。请小心使用此选项。

+0

我正在这样复杂得多,它应该是(见我的回答如下)。感谢您的回应。 – Mozy 2010-12-21 21:39:32

0

正确的方法将添加新项目在DomainDataSource.DataView而不是在DomainDataSource.DataContext:

在你原来的代码:

DomainDataSource.DataView.Add(y); 

这将有分页一些启示。新项目将被添加到当前页面中,从而扩展其大小。刷新后,大小将被调整。

参考:here

相关问题