2

私は2つのテーブルを持つデータセットを持っています。単純な1対多の親子関係が続いています。例えば;

Parent Table
ParentId (int)
Name     (string)

Child Table
ChildId (int)
ParentId (int)
Name     (string)

このデータセットでは、親IDフィールドの親と子の間に関係(ParentChildRelation)が設定されています。また、プログラムでParent.getChildRows()呼び出しを実行すると、関連する正しい子レコードが表示されるため、関係が良好であることがわかります。

親行のリストを含むデータグリッドを表示し、選択した親の子レコードのリストを表示する別のデータグリッドを用意する必要があります。

これまでのところ、私の背後にあるコードのウィンドウに

private DataSet _parentChildDataSet;
public DataSet ParentChildDataSet
{
    get
    {
        return _parentChildDataSet;
    }
    set 
    {
        _parentChildDataSet = value;
    }


    public DataView ParentView
    {
        get
        {
            return this.ParentChildDataSet.Tables["Parent"].DefaultView;
        }
    }

    public DataRelation ParentChildRelation
    {
        get
        {
            return this.ParentChildDataSet.Relations["Parent_Child"] ;
        }
    }

また、Windowsコンストラクターでウィンドウのデータコンテキストをそれ自体に設定します。

this.DataContext = this;

そして私のxamlで

<Grid>
    <DataGrid ItemsSource="{Binding Path=ParentView}" AutoGenerateColumns="True" Name="dataGrid1">
    </DataGrid>
    <DataGrid ItemsSource="{Binding Path=ParentChildRelation}" Name="dataGrid2" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

ただし、dataGrid2に表示する子レコードを取得できません。

このグリッドをデータリレーション名にバインドしていますこれは正しいですか?

ウィンドウ上の別のプロパティにバインドした場合;

    public DataView ChildrenView
    {
        get
        {
            return this.ParentChildDataSet.Tables["Child"].DefaultView;
        }
    }

そうすれば、あなたが期待するように、親に関係なくすべてのレコードが表示されます。

誰もが私に与えることができるポインタをありがとう。

4

1 に答える 1

0

DataViewを返すと、機能していますが、すべてが表示されます。

ここでは、DataRelationを返しています

ItemsSource="{Binding Path=ParentChildRelation}" 

DataViewを返す必要があります

リレーションを使用してDataViewを生成します

DataRowView.CreateChildViewメソッド(DataRelation)

于 2012-04-12T16:08:19.343 に答える