2010-12-18 12 views
1

私は、DataFormとDataGridをDomainDataSourceにバインドし、アイテムの追加、削除、編集の機能を実装しようとしています。SL4 | DomainDataSource/DataGrid |空の行を追加して新しいアイテムを挿入する

すべてがDataForm部分でうまく機能します。しかし、私はどのようにDataGridを使って新しいレコードを追加できるのですか? 私が今まで知っているように、2つの作業のオプションがあります。

  1. は、新たな追加 - データビューにアイテム - 「空白」を。

    • 問題:キーの要件と制約の結果として、エラーが発生しています。 Silverlightの4サービスリリース(2010年9月)から
    • "DataGridコントロールの新しい行機能を追加可能にするためにSDKの機能" を使用
    • は問題:何が正確に変わりましたか?新しいメンバーやドキュメントはありません。ここで

私のプロジェクトの最も重要な部分に一致するいくつかの基本的なマークアップ宣言です:

<Grid x:Name="LayoutRoot"> 
    <sdk:DataGrid x:Name="ParentGrid" AutoGenerateColumns="False" ItemsSource="{Binding ElementName=parentDomainDataSource, Path=Data}"/> 
    <toolkit:DataForm x:Name="ParentForm" CommandButtonsVisibility="All" Grid.Row="1" ItemsSource="{Binding ElementName=parentDomainDataSource, Path=Data}"/> 

    <sdk:DataGrid x:Name="ChildGrid" Grid.Column="1" AutoGenerateColumns="False" ItemsSource="{Binding ElementName=childDomainDataSource, Path=Data}"/> 
    <toolkit:DataForm x:Name="ChildForm" CommandButtonsVisibility="All" ItemsSource="{Binding ElementName=childDomainDataSource, Path=Data}"/> 

    <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:Child, CreateList=true}" Name="childDomainDataSource" QueryName="GetChildrenQuery" 
            DomainContext="{StaticResource domainCtx}"/> 
    </riaControls:DomainDataSource> 
    <riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my1:Parent, CreateList=true}" Name="parentDomainDataSource" QueryName="GetParentsQuery" 
            DomainContext="{StaticResource domainCtx}"/> 
</Grid> 

は残念ながら、私は外に実行しています時間。

ご協力いただきありがとうございます。ドイツからの敬具。誰も助けることができると思う;)

答えて

0

私はちょうどこの質問に似たものを把握しようとした。これは他の誰かの時間を節約することを期待してここに投稿:

「新規レコード」Button's Clickためのコードビハインドで:

private void OnNewRecordClick(object sender, System.Windows.RoutedEventArgs e) 
{ childDomainDataSource.DataView.Add(new Child()); } 

DataGridは即座に新しいレコードをピックアップし、あなたはまだやることができますSubmitChangesCommandをDDSに追加して、新しいエントリをDBにポストします。

0

あなたの質問に厳密には答えませんが、PagedCollectionViewを使用するとうまく動作します。さらに、Escキーを押すと、挿入されている行を取り消すことができます。

欠点は、ちょっとした本を保管しなければならないことです。

private DomainService1 ctx = new DomainService1(); 
private PagedCollectionView pcvPersons = null; 
private List<Person> tmpList = null; 

private void LoadData() 
{ 
    ctx.Load(ctx.GetPersonsQuery(), 
     (op) => 
     { 
      tmpList = new List<Person>(ctx.Persons); 
      pcvPersons = new PagedCollectionView(tmpList); 
      dataGrid1.ItemsSource = pcvPersons; 
     }, null); 
} 

private void AddButton_Click(object sender, RoutedEventArgs e) 
{ 
    Web.Person newItem = pcvPersons.AddNew(); 
} 
関連する問題