DatePicker System.FormatException

Posted

技术标签:

【中文标题】DatePicker System.FormatException【英文标题】: 【发布时间】:2015-02-21 21:59:38 【问题描述】:

如果我在此 DatePicker 中输入了无效日期,例如 20001 年 1 月 1 日(输入键) 我得到以下异常

“System.FormatException”类型的第一次机会异常发生在 mscorlib.dll

附加信息:字符串未被识别为有效的日期时间。

但似乎这是由绑定引发的,我找不到处理它的方法。 在调试中,我在屏幕上看到上述内容

打开堆栈跟踪,它说错误是在 SearchItem.Date1 get 上引发的 但问题是在那种情况下实际上并没有调用 get

如果我输入一个有效的日期,例如 2000 年 1 月 1 日,我会看到集合并被调用。

如果我输入无效日期,则无需设置。

我输入无效日期并按输入或失去焦点只是恢复到前一个日期并且不会引发异常。如果之前的日期为空,则它恢复为空。

如果用户输入有效日期,这对我来说是一个关键问题 然后输入一个无效的日期,DatePicker 只是恢复到最后一个有效日期。所以用户不知道日期没有改变。

问题是如何处理无效日期异常?

<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020" 
            SelectedDate="Binding Path=Date1, Mode=TwoWay, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged"/>

如果我拿出来

, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged  

没有任何变化

private DateTime? date1; 
public DateTime? Date1

    get
    
        try
        
            return date1;
        
        catch (Exception ex)
        
            return (DateTime?)null;
            throw;
        
    
    set
    
        if (date1 != value)
        
            date1 = value;
            NotifyPropertyChanged("Date1");    
        
    

【问题讨论】:

这是DatePickerSystem.Windows.Controls.DatePicker吗?因为如果是的话,当我运行你的代码时不会抛出异常。 @Bahman_Aries 对我来说,错误的方向也不例外。我需要赶上一个无效的日期。 【参考方案1】:

我能想到的一种方法是使用DateValidationError事件:

XAML:

<DatePicker Width="140" DisplayDateStart="1/1/1990" DisplayDateEnd="12/31/2020" 
            SelectedDate="Binding Path=Date1, Mode=TwoWay, 
            ValidatesOnExceptions=True, ValidatesOnDataErrors=True, 
            UpdateSourceTrigger=PropertyChanged"
            DateValidationError="DatePicker_DateValidationError" />

后面的代码:

private void DatePicker_DateValidationError(object sender, DatePickerDateValidationErrorEventArgs e)

    // throw FormatException
    e.ThrowException = true;

    //OR

    // handle the exception by showing message and clearing data
    MessageBox.Show(e.Exception.Message);
    ((DatePicker)sender).Text = null;

【讨论】:

到目前为止这看起来不错。让我再做一些测试。谢谢。

以上是关于DatePicker System.FormatException的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI 中的 datepicker( )方法

通过后面的代码动态对齐 Datepicker 按钮和 Datepicker 的日历

datepicker : 使用法语 datepicker 时出错

powerbuilder中datepicker控件

Android:DatePicker 和 DatePicker 对话框

Wpf DatePicker 水印修改为中文