Можно ли сгруппировать по дате, но отсортировать по дате + времени в сетке данных xceed?
Я использую (Community Edition) расширенный набор инструментов WPF для отображения записей, имеющих столбец 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 ответ
В конце концов я понял, что желаемое можно сделать и в чистом 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>
результат
в приведенном выше примере сортировка основана на полной дате и времени, когда в качестве группировки используется свойство Day свойства Created(DateTime)
Приведенный выше пример основан на некоторых предположениях, я не смог увидеть ваш подход как 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>
результат
Я ввел один стиль для верхней панели и шаблон данных для заголовка группы. Я использовал триггеры данных в стиле, чтобы установить пользовательский заголовок, так как кажется, что сетка данных имеет свой собственный механизм для получения заголовка группы. Также я изменил свойство группы со дня на дату, так как день был неправильным, поскольку это только день, а не дата.