2013-02-28 10 views
0

그것은 나를 미치게합니다. 저는 Silverlight 5 Business Application에서 WCF Ria Services (도메인 데이터 소스)를 사용하고 있습니다. 간단한 ChildControl에서 정의 된 (아래 코드 참조) 도메인 데이터 소스 "ddsTerminKonfiguration"을로드합니다. 쿼리 메서드는 일반 IQueryable <TerminKonfiguration> 목록을 반환합니다. 이 목록에 항목이 없다면 (... DataView.Count == 0) "TerminKonfiguration"이라는 새 개체를 추가하고 싶습니다. ddsTerminKonfiguration.DataView.Add (새로운 TerminKonfiguration())를 실행하려고 할 때; 나는 "Add '가이 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)); 
    } 

내가 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

DataView를이 그 원인이다 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> 

입니다.

{Binding Data, ElementName=source}" 
+0

답장을 보내 주셔서 감사합니다. 따라서 DataGrid에 바인딩하지 않고 하나의 항목/개체 만 쿼리하고 작업하는 것은 드문 일입니까? ;-) 어쩌면 내가 도메인 데이터 소스 InvokeOperation와 함께 일을하지 않고 그것을 할 수 있습니다. 어쨌든 : 힌트를 보내 주셔서 감사합니다. :-) – Chris

+0

DomainDataSource는 페이징, 정렬 및 필터링 작업에 이상적입니다. 컨텍스트에 항목을 추가하는 경우 컨텍스트에 항목을 추가해야합니다. 당신을 위해 RRPDomainContext.TerminKonfigurations.Add (... –