我有一个包含两个表的数据集,一个简单的一对多父子关系正在进行中。例如;
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构造函数中将窗口的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;
}
}
然后我会看到所有记录,无论父母如何,都是如你所愿。
感谢任何人都可以给我的任何指示。
答案 0 :(得分:1)
当您返回DataView时它正在工作但显示全部。
在这里,您将返回DataRelation
ItemsSource="{Binding Path=ParentChildRelation}"
您需要返回DataView
使用该关系生成DataView
DataRowView.CreateChildView方法(DataRelation)
答案 1 :(得分:1)
我无法找出接受的答案。我的情况与此处描述的情况相同:2个表,关系,2个数据网格。
我已经研究过CreateChildView方法,但我在某个地方错过了一个关键点。我目前获取子视图的代码:
public DataView ChildView {
get {
return ParentChildRelation.ParentTable.DefaultView[0].CreateChildView("regels")
}
}
问题是双重的,首先我显然已经修改了索引,这意味着我总是得到父表的第一行的子视图。其次,当在父视图中选择新行时,我在获取新的子视图时失败了(ChildView仅在初始化时被调用)。
我的XAML:
<Grid>
<DataGrid
ItemsSource="{Binding Path=ParentView}"
AutoGenerateColumns="True"
Name="dataGrid1"
/>
<DataGrid
ItemsSource="{Binding Path=ChildView}"
AutoGenerateColumns="True"
Name="dataGrid2"
/>
</Grid>
我希望将其作为XAML解决方案,并避免编写更新子视图的事件处理程序。我曾尝试过使用DataContext,但却无处可去,有关如何利用数据集和关系来利用这种结构的文档非常简单(让我想知道我是否走上了正确的道路)。