2014-01-15 121 views
1

您好IAM的和下面是其定义, 这里是输出的屏幕截图,嵌套数据网格使用嵌套数据网格工作

enter image description here

在上述图像,我有2个数据网格。如果我点击任何一行外层网格,就会显示相应的内部网格。现在,Iam没有得到如何处理这个事件并显示相应的内部网格数据。

这是类结构,其荫结合我的DataGrid,

class MyClass 
    { 
     public string Col1{ get; set; } 
     public string Col2{ get; set; } 
     public string Col3{ get; set; } 
     public string Col4{ get; set; } 
     public string Col5{ get; set; } 
     public ObservableCollection<InnerObject> inner_object{ get; set; } 
    } 

class InnerObject 
{ 
    public string EventName { get; set; } 
    public string Date { get; set; } 
    public string Time { get; set; } 
    public string Message { get; set; } 
    public int RIndex { get; set; } 
} 
<DataGrid 
     x:Name="objDatagrid" 
     ItemsSource="{Binding DataView}" 
     CanUserAddRows="False" 
     CanUserDeleteRows="False" 
     AutoGenerateColumns="False" 
     BorderBrush="Gray" 
      > 
      <DataGrid.RowStyle> 
       <Style TargetType="{x:Type DataGridRow}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding TDate}" Value=""> 
          <Setter Property="Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </DataGrid.RowStyle> 
      <DataGrid.RowDetailsTemplate > 
       <DataTemplate> 


         <DataGrid 
      x:Name="objInnerDatagrid" 
      IsReadOnly="True" 
      ItemsSource="{Binding ElementName=objDatagrid, Path=SelectedItem.inner_object}"> 
          <DataGrid.RowStyle> 
<Style TargetType="{x:Type DataGridRow}"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Date}" Value=""> 
              <Setter Property="Visibility" Value="Collapsed"/> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </DataGrid.RowStyle> 
          <DataGrid.Columns> 
          </DataGrid.Columns> 
         </DataGrid> 
       </DataTemplate> 
      </DataGrid.RowDetailsTemplate> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Col1" Width="SizeToHeader" Binding="{Binding Col1}" IsReadOnly="True"/> 
       <DataGridTextColumn Header="Col2" Width="80" Binding="{Binding Col2}" IsReadOnly="True"/> 
       <DataGridTextColumn Header="Col3" Width="80" Binding="{Binding Col3}" IsReadOnly="True"/> 
       <DataGridTextColumn Header="Col4" Width="120" Binding="{Binding Col4}" IsReadOnly="True"/> 
       <DataGridTextColumn Header="Col5" Width="100" Binding="{Binding Col5}" IsReadOnly="True"/> 
      </DataGrid.Columns> 
     </DataGrid> 

荫新手到WPF。任何人都可以请解释我上面的代码和它的工作? 这将是一个很大的帮助。 在此先感谢。

回答

2

正如你可以在你的代码已经看RowDetailsTemplate显示内部网格。显示行细节的默认行为是当某人选择父行时。

如果你想这种行为覆盖(例如,你想显示在双击或某事的细节数据网格),那么你可能需要做的工作背后的一些代码...

看到这个职位的详细信息...

Show RowDetails on double-click in WPF DataGrid

+0

非常感谢。 Ur链接帮助。我只想知道,我可以用所有这些RowDetailsTemplate以编程方式创建相同的DataGrid结构 – Surjeet

3

DataGrid.RowDetailsVisibilityMode定义何时显示详细信息行并且DataGrid.RowDetailsTemplate定义显示内容。

默认情况下,该行详细信息部分显示所选行如果RowDetailsTemplate定义

它的工作原理,因为你绑定内DataGrid.ItemsSourceSelectedIteminner_object - 你的情况MyClass - objDatagrid控制

ItemsSource="{Binding ElementName=objDatagrid, Path=SelectedItem.inner_object}"> 

然而存在潜在的问题。它将始终绑定到第一个选定的项目,而不是您当前打开的项目。例如,当DataGrid.RowDetailsVisibilityMode = Visible所有细节都将指向相同的项目选择。由于各行的DataContext,包括行详细信息,将已设定的MyClass所有你需要做的一个实例是:

ItemsSource="{Binding Path=inner_object}"> 

在内DataGrid

+0

谢谢你的详细解释。我只想知道,我可以创建与所有这些RowDetailsTemplate编程相同的DataGrid结构 – Surjeet

+1

你的意思是“...你所要做的就是:'ItemsSource =”{Binding inner_object}“>”“ – mcalex

+0

@mcalex是的。发现得好。谢谢。它现在已经修复了 – dkozl