是否可以按日期分组,但在xceed数据网格中按日期+时间排序?

时间:2014-08-18 09:53:37

标签: c# wpf xceed-datagrid

我正在使用Extended WPF Toolkit的(社区版)来显示具有DateTime列的记录。

<xcdg:DataGridControl
        ItemsSource="{Binding ResponseInstructions, UpdateSourceTrigger=PropertyChanged}"
        ReadOnly="True"
        AutoCreateColumns="False"
    >
    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="Created" Title="Request made">
            <xcdg:Column.CellContentTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding StringFormat=\{0:dd/MM/yy hh:mm\}}" />
                </DataTemplate>
            </xcdg:Column.CellContentTemplate>
        </xcdg:Column>
        <!-- SNIP: Some other columns here... -->
        <xcdg:Column FieldName="Notes" Title="Notes" Width="*" />
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

我希望能够更改DateTime列的分组行为,使其按日期分组(即忽略时间),但也保留默认排序功能(即日期,然后是时间)。

如果不需要保留默认排序功能,我只需将列从DatetTime更改为Date。有没有办法让我的蛋糕吃到它?

1 个答案:

答案 0 :(得分:2)

最终我发现所需的也可以在纯xaml中完成。

这是示例xaml

    <xcdg:Column FieldName="Created"
                    Title="Request made">
        <xcdg:Column.GroupDescription>
            <xcdg:DataGridGroupDescription PropertyName="Created.Day"/>
        </xcdg:Column.GroupDescription>
        <xcdg:Column.CellContentTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding StringFormat=\{0:dd/MM/yy hh:mm\}}" />
            </DataTemplate>
        </xcdg:Column.CellContentTemplate>
    </xcdg:Column>

结果

result

在上面的示例中,排序基于完整的日期和时间,其中分组在Created(DateTime)属性的Day属性上

以上示例基于某些假设,我无法看到您的方法,因为GroupByDate中的GroupDescription="{StaticResource GroupByDate}"资源未在问题中提及。

修改

这里要求的是一种改变组的大多数方面的方法,包括顶部面板和组头

<xcdg:DataGridControl ItemsSource="{Binding ResponseInstructions}"
                      ReadOnly="True"
                      AutoCreateColumns="False">
    <xcdg:DataGridControl.Resources>
        <Style TargetType="{x:Type xcdg:GroupByItem}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Title}"
                             Value="Created.Date">
                    <Setter Property="Content"
                            Value="Request made" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
        <DataTemplate DataType="{x:Type xcdg:Group}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Value,StringFormat=dd/MM/yy}" />
                <TextBlock Text=": " />
                <TextBlock Text="{Binding Items.Count}" />
                <TextBlock Text=" request(s)" />
            </StackPanel>
        </DataTemplate>
    </xcdg:DataGridControl.Resources>
    <xcdg:DataGridControl.Columns>
        <xcdg:Column FieldName="Created"
                     Title="Request made">
            <xcdg:Column.GroupDescription>
                <xcdg:DataGridGroupDescription PropertyName="Created.Date" />
            </xcdg:Column.GroupDescription>
            <xcdg:Column.CellContentTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding StringFormat=\{0:dd/MM/yy hh:mm\}}" />
                </DataTemplate>
            </xcdg:Column.CellContentTemplate>
        </xcdg:Column>
        <!-- SNIP: Some other columns here... -->
        <xcdg:Column FieldName="Notes"
                     Title="Notes"
                     Width="*" />
    </xcdg:DataGridControl.Columns>
</xcdg:DataGridControl>

结果

result

我为顶部面板引入了一种样式,为组头引入了数据模板。我在样式中使用了数据触发器来设置自定义标题,因为数据网格似乎有自己的机制来检索组标题。此外,我已经从日期到日期修改了组属性,因为日期不正确,因为它只是日期而不是日期。