昨天在网上搜了一下午没有看到一个关于WPF DataGrid主从表数据绑定的示例,但是我坚信这个简单的功能肯定是支持的,经研究问题解决。
现把相关方法共享下,给现在还在郁闷的兄弟们一点参考。重点在于定义DataGrid的“RowDetailsTemplate”属性。而绑定的数据对象只要定义从表的集合Children就可以了。
前台定义如下:
<
DataGrid
Grid.Row
="0"
Margin
="0,0,0,0"
VerticalAlignment
="Top"
AutoGenerateColumns
="False"
>
< DataGrid.Columns > < DataGridTextColumn Header ="出现连阴雨站数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=出现站点数} " />
< DataGridTextColumn Header ="开始日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=开始日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="结束日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=结束日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="最长持续天数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最长持续天数} " />
< DataGridTextColumn Header ="最长持续天数出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最长持续天数出现站点} " />
< DataGridTextColumn Header ="过程最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=过程最大雨量} " />
< DataGridTextColumn Header ="过程最大雨量出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=过程最大雨量出现站点} " />
< DataGridTextColumn Header ="日最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=日最大雨量} " />
< DataGridTextColumn Header ="日最大雨量出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=日最大雨量出现站点} " />
</ DataGrid.Columns >
< DataGrid.RowDetailsTemplate >
< DataTemplate >
< DataGrid Grid.Row ="0" Margin ="0,0,0,0" ItemsSource =" {Binding Path=Children} " VerticalAlignment ="Top" AutoGenerateColumns ="False" >
< DataGrid.Columns >
< DataGridTextColumn Header ="站名" IsReadOnly ="True" Width ="80" Binding =" {Binding Path=站名} " />
< DataGridTextColumn Header ="站台号" IsReadOnly ="True" Width ="80" Binding =" {Binding Path=站台号} " />
< DataGridTextColumn Header ="开始日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=开始日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="结束日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=结束日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="持续天数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=连续降水日数} " />
< DataGridTextColumn Header ="总雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=总降水量} " />
< DataGridTextColumn Header ="一日最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最大降水量} " />
< DataGridTextColumn Header ="日照时数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=无降水日照时数} " />
</ DataGrid.Columns >
</ DataGrid ></ DataTemplate >
</ DataGrid.RowDetailsTemplate >
</ DataGrid >
< DataGrid.Columns > < DataGridTextColumn Header ="出现连阴雨站数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=出现站点数} " />
< DataGridTextColumn Header ="开始日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=开始日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="结束日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=结束日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="最长持续天数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最长持续天数} " />
< DataGridTextColumn Header ="最长持续天数出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最长持续天数出现站点} " />
< DataGridTextColumn Header ="过程最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=过程最大雨量} " />
< DataGridTextColumn Header ="过程最大雨量出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=过程最大雨量出现站点} " />
< DataGridTextColumn Header ="日最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=日最大雨量} " />
< DataGridTextColumn Header ="日最大雨量出现站点" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=日最大雨量出现站点} " />
</ DataGrid.Columns >
< DataGrid.RowDetailsTemplate >
< DataTemplate >
< DataGrid Grid.Row ="0" Margin ="0,0,0,0" ItemsSource =" {Binding Path=Children} " VerticalAlignment ="Top" AutoGenerateColumns ="False" >
< DataGrid.Columns >
< DataGridTextColumn Header ="站名" IsReadOnly ="True" Width ="80" Binding =" {Binding Path=站名} " />
< DataGridTextColumn Header ="站台号" IsReadOnly ="True" Width ="80" Binding =" {Binding Path=站台号} " />
< DataGridTextColumn Header ="开始日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=开始日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="结束日期" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=结束日期, StringFormat=yyyy-MM-dd} " />
< DataGridTextColumn Header ="持续天数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=连续降水日数} " />
< DataGridTextColumn Header ="总雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=总降水量} " />
< DataGridTextColumn Header ="一日最大雨量" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=最大降水量} " />
< DataGridTextColumn Header ="日照时数" IsReadOnly ="True" Width ="auto" Binding =" {Binding Path=无降水日照时数} " />
</ DataGrid.Columns >
</ DataGrid ></ DataTemplate >
</ DataGrid.RowDetailsTemplate >
</ DataGrid >
数据对象定义如下:
public
class
区域连阴雨过程历史对比
{
public int 出现站点数 { get ; set ; }
public DateTime 开始日期 { get ; set ; }
public DateTime 结束日期 { get ; set ; }
public int 最长持续天数 { get ; set ; }
public string 最长持续天数出现站点 { get ; set ; }
public double 过程最大雨量 { get ; set ; }
public string 过程最大雨量出现站点 { get ; set ; }
public double 日最大雨量 { get ; set ; }
public string 日最大雨量出现站点 { get ; set ; }
public List < 连阴雨过程信息 > Children { get ; set ; }
}
{
public int 出现站点数 { get ; set ; }
public DateTime 开始日期 { get ; set ; }
public DateTime 结束日期 { get ; set ; }
public int 最长持续天数 { get ; set ; }
public string 最长持续天数出现站点 { get ; set ; }
public double 过程最大雨量 { get ; set ; }
public string 过程最大雨量出现站点 { get ; set ; }
public double 日最大雨量 { get ; set ; }
public string 日最大雨量出现站点 { get ; set ; }
public List < 连阴雨过程信息 > Children { get ; set ; }
}