2013-02-28 60 views
0

它让我发疯。我正在使用Silverlight 5业务应用程序并使用WCF Ria服务(域数据源)。在一个简单的ChildControl中,我加载定义的域(见下面的代码)域数据源“ddsTerminKonfiguration”。该查询方法返回一个通用的IQueryable <TerminKonfiguration>列表。如果此列表中没有项目(... DataView.Count == 0)我想添加一个“TerminKonfiguration”的新对象。当我尝试执行ddsTerminKonfiguration.DataView.Add(new TerminKonfiguration());我遇到了一个错误,''添加'不支持这个ICollectionView“(我只知道德国的错误信息...所以我希望每个人都可以理解我的翻译:-D)。这个项目中的可比较的代码片段(由其他开发人员编码)正在正常工作......并且我不知道如何解决这个问题。新对象添加到域的数据源

没有人有我的问题的想法或解决方案?

我的域数据源...

<riaControls:DomainDataSource Name="ddsTerminKonfiguration" 
           Width="0" 
           Height="0" 
           AutoLoad="False" 
           d:DesignData="{d:DesignInstance my1:TerminKonfiguration, CreateList=true}" 
           LoadedData="ddsTerminKonfiguration_LoadedData" 
           SubmittedChanges="ddsTerminKonfiguration_SubmittedChanges" 
           QueryName="GetTerminKonfigurationQuery"> 
    <riaControls:DomainDataSource.DomainContext> 
     <my:RRPDomainContext /> 
    </riaControls:DomainDataSource.DomainContext> 
    <riaControls:DomainDataSource.QueryParameters> 
     <riaControls:Parameter ParameterName="param01" /> 
     <riaControls:Parameter ParameterName="param02" /> 
     <riaControls:Parameter ParameterName="param03" /> 
     <riaControls:Parameter ParameterName="param04" /> 
    </riaControls:DomainDataSource.QueryParameters> 
</riaControls:DomainDataSource> 

命名空间 “我” 对 “工程” .Web.Services和 “MY1” 到 “项目” .Web.Models。

查询方法...

public IQueryable<TerminKonfiguration> GetTerminKonfiguration(string param01, string param02, int param03, int param04) { 
     return this.ObjectContext.TerminKonfiguration.Where(d => (d.MandantenNr == param01) && (d.WorkflowNr == param02) && (d.WfAufgabeId == param03) && (d.WfAufgabeIdGlobal == param04)); 
    } 

的片段,在这里我尝试将新对象添加到数据视图...

if (this.ddsTerminKonfiguration.DataView.Count == 0) { 
    TerminKonfiguration tmpConfig = new TerminKonfiguration(); 
    /* 
     define the new object 
    */ 

    this.ddsTerminKonfiguration.DataView.Add(tmpConfig); // problematic line 
} 

this.ddsTerminKonfiguration.SubmitChanges(); 

回答

1

数据视图是一个DataView这是原因。 DataView是数据的视图。

有了可以过滤订单等数据源,那么你看到的数据视图效果。

this.ddsTerminKonfiguration.DataView.Add is not a valid operation. 

http://msdn.microsoft.com/en-us/library/ee707363(v=vs.91).aspx

基本用法是

<Grid x:Name="LayoutRoot" Background="White"> 
<riaControls:DomainDataSource x:Name="source" QueryName="GetProductsByColor" AutoLoad="true"> 
    <riaControls:DomainDataSource.DomainContext> 
     <domain:ProductDomainContext /> 
    </riaControls:DomainDataSource.DomainContext> 
    <riaControls:DomainDataSource.QueryParameters> 
     <riaData:Parameter ParameterName="color" Value="Black" /> 
    </riaControls:DomainDataSource.QueryParameters> 
</riaControls:DomainDataSource> 

<data:DataGrid ItemsSource="{Binding Data, ElementName=source}" /> 

    </Grid> 

当你注意到它的DataGrid绑定到数据没有数据视图。

{Binding Data, ElementName=source}" 
+0

感谢您的答复。那么,仅查询一个单独的项目/对象并且无需绑定到DataGrid就不常见? ;-)也许我可以做到这一点,没有域数据源与InvokeOperation工作。 无论如何:谢谢你的提示。 :-) – Chris 2013-02-28 11:04:52

+0

DomainDataSource非常适合分页,排序和过滤操作。如果您只是将项目添加到上下文中,则应将其添加到上下文中。为你RRPDomainContext.TerminKonfigurations.Add(... – 2013-02-28 11:14:35