如何从关系数据集中呈现wpf master-detail数据网格

时间:2017-03-04 21:07:26

标签: c# wpf xaml data-binding

这是reversed的一个交叉点,我无法成功应用建议的答案。

我的情况与源中描述的情况相同:我有2个数据表(1个带发票,1个行指定要开发票的行)在共享关系的数据集中,我还想显示那些数据表两个datagrids作为主 - 细节视图。

我已经研究过CreateChildView方法,但我在某个地方错过了一个关键点。我目前获取子视图的代码:

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

问题是双重的,首先我显然已经修改了索引,这意味着我总是得到父表的第一行的子视图。其次,当在父视图中选择新行时,我在获取新的子视图时失败了(ChildView仅在初始化时被调用)。

我的XAML:

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

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

我希望将其作为XAML解决方案,并避免编写更新子视图的事件处理程序。我曾尝试过使用DataContext,但却无处可去,有关如何利用数据集和关系来利用这种结构的文档非常简单(让我想知道我是否走上了正确的道路)。

我错过了语义,细节视图应该如何知道选择了哪个父项以及应该显示哪些项目。

1 个答案:

答案 0 :(得分:0)

我还没有使用DataSet很长一段时间,但是对于这样的主从细节场景,你可以试试

 <DataGrid
        ItemsSource="{Binding SelectedItem, ElementName=ParentDataGrid, Converter={...}}"/>

您将获得SelectedItem作为父行,然后您可以对此行执行某些操作并构造/获取ICollection以从IValueConverter返回。