【问题标题】:Datagrid inside Datagrid RowDetailsTemplateDatagrid RowDetailsTemplate 内的 Datagrid
【发布时间】:2013-12-22 20:20:32
【问题描述】:

我正在尝试创建在数据网格中进行分组的效果,而不必使用数据网格可用的分组,因为除非我“伪造”,否则我不会在标题行上显示列值并且自己制作我之前做过的所有专栏。我有一个工作示例,我可以让一个数据网格在另一个数据网格的 rowdetails 模板中填充数据。我的主要问题是我注意到内部数据网格不尊重我的某些属性,特别是 FrozenColumnCount,当我移动外部数据网格的滚动查看器时,内部数据网格移动但没有冻结列。

这是一些代码,希望能更好地展示我在做什么:

<DataGrid ItemsSource="{Binding DisplayRows}" AutoGenerateColumns="False" Grid.Row="1" FrozenColumnCount="1" >
        <DataGrid.RowDetailsTemplate >
            <DataTemplate>
                <DataGrid AutoGenerateColumns="False" FrozenColumnCount="1" ItemsSource="{Binding DataContext.DisplayRows, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}">
                    <DataGrid.Columns>
                        <DataGridTextColumn Binding="{Binding Timestamp, StringFormat=\{0:MMM dd\, yyyy HH:mm\}}" Header="Timestamp" Width="113" />
                        <DataGridTextColumn Header="HE1" Binding="{Binding Hours[0], StringFormat=\{0:#\,##0\}}" Width="50">
                            <DataGridTextColumn.CellStyle>
                                <Style TargetType="{x:Type DataGridCell}">
                                    <Style.Setters>
                                        <Setter Property="Background" Value="{Binding Backgrounds[0]}" />
                                        <Setter Property="TextBlock.TextAlignment" Value="Right" />
                                        <Setter Property="HorizontalAlignment" Value="Stretch" />
                                    </Style.Setters>
                                </Style>
                            </DataGridTextColumn.CellStyle>
                        </DataGridTextColumn>
                    </DataGrid.Columns>
                </DataGrid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Timestamp, StringFormat=\{0:MMM dd\, yyyy HH:mm\}}" Header="Timestamp" Width="120" />
            <DataGridTextColumn Header="HE1" Binding="{Binding Hours[0], StringFormat=\{0:#\,##0\}}" Width="50">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Style.Setters>
                            <Setter Property="Background" Value="{Binding Backgrounds[0]}" />
                            <Setter Property="TextBlock.TextAlignment" Value="Right" />
                            <Setter Property="HorizontalAlignment" Value="Stretch" />
                        </Style.Setters>
                    </Style>
                </DataGridTextColumn.CellStyle>
            </DataGridTextColumn>
         </DataGrid.Columns>
    </DataGrid>

我的实际项目有更多行,但这是简化的 xml。这里有一些图片来说明我正在谈论的问题。

希望有人可以帮助我解决这个问题。感谢您的帮助。

【问题讨论】:

  • 我认为冻结的列只会在与拥有该列的数据网格的滚动查看器交互时冻结。如果你想要那种效果,你将不得不搞乱同步两个数据网格的滚动查看器。
  • 是的,情况似乎如此。我注意到如果我给我的内部数据网格提供最大尺寸,冻结的列肯定可以工作,但它有自己的滚动。

标签: c# xml wpf datagrid


【解决方案1】:

我认为层次数据网格的最佳方式使用本文的方法: http://blogs.perpetuumsoft.com/silverlight/how-to-turn-silverlight-datagrid-to-treegrid-in-15-minutes/

【讨论】:

  • 哇,效果好多了。您是否对该文章中描述的方法了解很多。我的一切工作正常,除了我的 mvvm 模式,我似乎只能从后面的代码中设置数据网格的 ItemSource,而不是直接在我想要的 xaml 中。