2011-07-01 16 views
1

私は、簡単なデータグリッドのリストアドレスと、ユーザーが新しいものを編集/追加できる子ウィンドウを持っています。データグリッドのメインフォームには、 "Insert New Address"ボタンがあり、空のAddressオブジェクトを持つ子ウィンドウをロードする必要があります。しかし、それは私にレコードを追加させません。何か間違っているのですか?現在のコードは次のとおりです。Silverlight 4 DomainDataSourceに新しい項目を追加する

Dim address As New Address 
    Dim frmAddressObj As New frmAddress 

    If frmAddressObj.AddressDomainDataSource.DataView.CanAdd = False Then 
     frmAddressObj.AddressDomainDataSource.Load() 
    End If 
    frmAddressObj.AddressDomainDataSource.DataView.Add(address) 

アドレスは、オブジェクトです。 frmAddressは子ウィンドウのフォームです。 AddressDomainDataSourceは、私が子供で使用するデータグリッドで使用するのと同じデータソースです。 CanAddは常にfalseで、追加する前に読み込みを試みるように言われましたが、これは役に立たなかったようです。 Addメソッドに到達すると、このICollectionViewでは 'Add'の例外がサポートされません。どんな助けもありがとう。ありがとう

答えて

1

DataViewフィールドは読み取り専用コレクションと考える必要があります。

(myDataSource.DomainContext as myDomainContext).my_entitys.Remove(dgOrders.SelectedItem as order); 
(myDataSource.DomainContext as myDomainContext).SubmitChanges(); 

それは、挿入のために類似している、あなただけの

my_entitys.Add(myNewEntityInstance); 

代わりの

my_entitys.Remove(entityToRemove); 

と更新のために使用します。データグリッドとDomainDataSourceの最も簡単な一般的な使い方は次のようなものが行きますあなたは単に電話するだけです

(myDataSource.DomainContext as myDomainContext).SubmitChanges(); 
0

ドメインサービスにも挿入メソッドが必要です。

Public Sub InsertAddress(address As Address) 
End Sub 

またはC#で

public void InsertAddress(Address address) 
0

私は最近、同じ問題を抱えていたし、私の場合には、DomainDataSourceがロードされていなかった(あるいはにバインド:だから、あなたはのように見える方法を持っていることを確認してくださいそのコンテキストはまだ選択されていないTabItemに存在していたため)。

あなたのドメインデータソースが視覚的なツリーに正しくロードされていることを確認してください。私のケースではこの問題が解決されました。