1

DataForm と DataGrid を DomainDataSource にバインドし、アイテムの追加、削除、編集の機能を実装しようとしています。

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

  1. 新しい「空白」項目を DataView に追加します。

    • 問題: 重要な要件と制約の結果として検証エラーが発生します。
  2. Silverlight 4 サービス リリース (2010 年 9 月) の「SDK 機能を使用して、DataGrid コントロールで新しい行の追加機能を有効にする」

    • 問題: 正確には何が変わったのですか? 新しいメンバーやドキュメントはありません。

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

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

残念ながら、もう時間がありません。

助けてくれてありがとう。ドイツからよろしく。誰かが助けてくれることを願っています;)

4

2 に答える 2

0

私はちょうど同じようなことを理解しようとしてこの質問に出くわしました。これが他の誰かの時間を節約することを期待してここに投稿する:

「新しいレコード」のコードビハインドButton's Click

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

は新しいレコードを即座に取得し、DDSで新しいエントリをDBにポストバックするDataGridことができます。SubmitChangesCommand

于 2011-03-08T13:35:26.333 に答える
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();
}
于 2012-01-07T05:50:34.423 に答える