将新对象添加到域数据源

时间:2013-02-28 10:42:55

标签: wcf silverlight domaindatasource

它让我发疯了。我正在使用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>

名称空间“my”引用“Project”.Web.Services,“my1”引用“Project”.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));
    }

该片段,我尝试将新对象添加到DataView ...

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 个答案:

答案 0 :(得分:1)

DataView是一个DataView,这就是原因。 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绑定到Data not DataView。

{Binding Data, ElementName=source}"