Добавить новый объект в источник данных домена

это сводит меня с ума. Я работаю над бизнес-приложением 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();

person Chris    schedule 28.02.2013    source источник


Ответы (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, а не к DataView.

{Binding Data, ElementName=source}"
person Davut Gürbüz    schedule 28.02.2013
comment
Спасибо за ваш ответ. Итак, необычно запрашивать только один элемент/объект и работать без привязки к DataGrid? ;-) Может быть, я могу сделать это без источника данных домена, работая с InvokeOperation. В любом случае: Спасибо за подсказку. :-) - person Chris; 28.02.2013
comment
DomainDataSource идеально подходит для операций пейджинга, сортировки и фильтрации. Если вы просто добавляете элемент в свой контекст, вы должны добавить его в свой контекст. для вас RRPDomainContext.TerminKonfigurations.Add(... - person Davut Gürbüz; 28.02.2013