WPF DataGrid按日期和时间分组和排序

时间:2013-05-13 10:44:21

标签: c# wpf datagrid

我有一个WPF DataGrid绑定到要在DataGrid上显示的约会对象的ICollectionView。我的约会每个都有一个DateTime字段,我试图按日期分组并按时间排序。我尝试了各种配置和日期时间格式,虽然分组正确完成,但组本身并没有排序。

添加新的约会会将约会日期时间默认为“立即”。当我更改日期时,如果该日期不存在,则添加该日期的新组,但不对这些组进行排序。

我使用了这里找到的GroupStyle:http://www.wpftutorial.net/DataGrid.html#grouping

我也在使用DataGrid列的Extended WPF Toolkit(通过nuget下载)DateTimePicker:

<DataGridTemplateColumn
                    x:Name="AppointmentDateTimeColumn"
                    Header="Time"
                    Width="Auto">
                    <DataGridTemplateColumn.CellStyle>
                        <Style
                            TargetType="{x:Type DataGridCell}">
                            <Setter
                                Property="Template">
                                <Setter.Value>
                                    <ControlTemplate
                                        TargetType="{x:Type DataGridCell}">
                                        <Grid
                                            Background="{TemplateBinding Background}">
                                            <ContentPresenter
                                                VerticalAlignment="Stretch" />
                                        </Grid>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DataGridTemplateColumn.CellStyle>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <xctk:DateTimePicker
                                Value="{Binding Path=Appointment.AppointmentDateTime, Mode=TwoWay}"
                                Format="ShortTime" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <xctk:DateTimePicker
                                Value="{Binding Path=Appointment.AppointmentDateTime, Mode=TwoWay}"
                                Format="ShortTime" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>

我的ICollectionView初始化代码是:

AppointmentList = CollectionViewSource.GetDefaultView(GetAppointments());

AppointmentList.GroupDescriptions.Add(new PropertyGroupDescription("Appointment.AppointmentDateTime.Date"));

AppointmentList.SortDescriptions.Add(new SortDescription("Appointment.AppointmentDateTime", ListSortDirection.Ascending));

任何帮助\建议将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

我最终只是将datagrid的所有列都只读,并添加了一些文本框,我可以使用这些文本框编辑数据网格的选定项目。我的网格在更新后现在正确排序。