如何修复Xceed DateTimePicker ArgumentOutOfRangeException错误

时间:2017-09-06 09:01:12

标签: wpf datagrid datetimepicker xceed

我使用Xceed DateTimePicker作为绑定到Date属性的所有列的wpf DataGrid中的控件。每个列的定义如下:

    <DataGrid.Columns>
    <DataGridTemplateColumn
    Header="Charge Date"
    Width="100">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock
                Text="{Binding Path=ChargeDate, StringFormat=yyyy-MM-dd, Converter={StaticResource conDate}}"
                HorizontalAlignment="Center" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <tk:DateTimePicker Value="{Binding Path=ChargeDate}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

我不认为这与我的问题相关,但为了完整起见,这里是拣货员的造型:

<Style TargetType="{x:Type tk:DateTimePicker}">
    <Setter Property="TextAlignment" Value="Center" />
    <Setter Property="Minimum" Value="2017-01-01" />
    <Setter Property="DisplayDefaultValueOnEmptyText" Value="False" />
    <Setter Property="ShowButtonSpinner" Value="False" />
    <Setter Property="TimePickerVisibility" Value="Collapsed" />
    <Setter Property="AutoCloseCalendar" Value="True" />
    <Setter Property="Format" Value="Custom" />
    <Setter Property="FormatString" Value="yyyy-MM-dd" />
</Style>

这适用于已填充的数据网格单元格或当我在新行中输入数据时。但是,当我单击现有行中的空单元格时,出现以下异常:

System.ArgumentOutOfRangeException: 'SelectedDate value is not valid.'

为什么只有在现有行中输入数据时才会出现错误?发生此异常时,不会执行代码隐藏,因此我不知道在哪里查找问题。

2 个答案:

答案 0 :(得分:1)

由于您已将reload(sys) sys.setdefaultencoding('euc-kr') 属性设置为Minimum,因此您还应将默认值设置为相同的日期:

2017-01-01

如果默认值或值小于最小值,您将获得<Style TargetType="{x:Type tk:DateTimePicker}"> <Setter Property="TextAlignment" Value="Center" /> <Setter Property="Default" Value="2017-01-01" /> <Setter Property="Minimum" Value="2017-01-01" /> <Setter Property="DisplayDefaultValueOnEmptyText" Value="False" /> <Setter Property="ShowButtonSpinner" Value="False" /> <Setter Property="TimePickerVisibility" Value="Collapsed" /> <Setter Property="AutoCloseCalendar" Value="True" /> <Setter Property="Format" Value="Custom" /> <Setter Property="FormatString" Value="yyyy-MM-dd" /> </Style> ,这非常有意义。

答案 1 :(得分:1)

我有同样的问题。要解决此问题,请将ClipValueToMinMax属性设置为“ True”。这将防止该值低于最小值/高于最大值而不会引发异常。

<xceed:DateTimePicker Value="{Binding DateTime}"
                      Minimum="{Binding DateTimeMinimum}"
                      Maximum="{Binding DateTimeMaximum}"
                      ClipValueToMinMax="True"/>