如何显示在数据网格WPF从数据集的相关数据(How to display related data

2019-09-16 12:18发布

我有一个数据集的两个表,一个简单的一对多的父子关系回事。 例如;

Parent Table
ParentId (int)
Name     (string)

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

在这一集我已经得到了家长和孩子的父母id字段之间建立的关系(ParentChildRelation)。 如果我做程式设计一个Parent.getChildRows()调用我看到正确的相关子记录,所以我知道的关系是很好的。

我需要显示与母行的列表中的数据网格,并有另一个单独的DataGrid选定父显示的子记录列表。

到目前为止,我的窗口,在后面的代码我有

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"] ;
        }
    }

我还设置为窗口,以自己在窗户的构造如DataContext的;

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露面。

我在此网格结合的DataRelation名称是否正确呢?

如果我绑定到我的窗口,另一个属性;

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

然后,我看到所有的记录,而不管父的你所期望的。

感谢您的任何指针谁能给我。

Answer 1:

当您返回一个DataView这是工作,但显示所有。

在这里,您正在返回一个DataRelation

ItemsSource="{Binding Path=ParentChildRelation}" 

你需要返回一个DataView

使用关系产生数据视图

DataRowView.CreateChildView方法(的DataRelation)



Answer 2:

我无法制定出公认的答案。 我的情况是与此处描述的:2个表,关系,2个数据网格。

我特地到CreateChildView方法,但我缺少一个关键的地方。 我目前用于获取childview代码:

public DataView ChildView {
    get {
        return ParentChildRelation.ParentTable.DefaultView[0].CreateChildView("regels")
    }
}

问题是双重的,首先我明明有索引固定的,这意味着我总是得到parenttable的第一行的childview。 其次,我在获取时,一个新的行中的父视图中选择(ChildView只被调用在初始化时)新的子视图惨遭失败。

我的XAML:

<Grid>
    <DataGrid
        ItemsSource="{Binding Path=ParentView}"
        AutoGenerateColumns="True"
        Name="dataGrid1" 
    />

    <DataGrid
        ItemsSource="{Binding Path=ChildView}"
        AutoGenerateColumns="True"
        Name="dataGrid2"
    />
</Grid>

我想使这个XAML的解决方案,避免写事件处理器更新childview。 我试着玩弄DataContext的,但毫无进展,就如何utilze这个结构数据集和关系文档非常渺茫(使我不知道如果我要沿着正确的路径)。



文章来源: How to display related data from dataset in wpf datagrid