未设置日期时,将 RadDatePicker 的默认值设置为 NULL

Posted

技术标签:

【中文标题】未设置日期时,将 RadDatePicker 的默认值设置为 NULL【英文标题】:Set default value of RadDatePicker to NULL when date is not set 【发布时间】:2012-04-29 17:25:02 【问题描述】:

我将 RadDatePicker 绑定到 viewModel dateTime 属性。当数据库中的属性为空时,我得到 01/01/0001。如何更改此行为以将日期字段留空.. 示例:

在数据库中 ===> experiation_date : NULL 在视图中(GUI)===> exeration_date : 01/01/0001

预期结果 ===> exeration_date : Blank

【问题讨论】:

【参考方案1】:

将 SelectedDate 设置为 null(而不是 DBNull):

RadDatePicker1.SelectedDate = null;

并在 xaml 中将 DateTimeWatermarkContent 设置为空字符串:

<telerik:RadDatePicker x:Name="RadDatePicker1" DateTimeWatermarkContent="" />

【讨论】:

我该如何解决 是的,我得到了解决这个问题的方法...我们只需要更改绑定到视图模型中 控件的属性的数据类型。 【参考方案2】:

并非总是可以将数据类型从 DateTime 更改为 DateTime?实际上可能需要 DateTime 对象。 (一个典型的场景是当您的控件绑定到具有 DateTime 类型的数据库对象,但您正忙于在控件中创建新记录,因此此时该值仍然为空。)在这种情况下,可以像 Paulo 在以下链接中所做的那样编写一个值转换器:http://www.telerik.com/forums/default-date-value-01-01-001(请参阅他的 EditDateConverter 代码。它按原样工作......)我将他的代码粘贴在这里以供参考,以防该链接将来停止工作:

public class EditDateConverter : IValueConverter

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    
        if (value != null && value.GetType().FullName == "System.DateTime")
        
            var dt2 = (DateTime)value;
            if (dt2 != DateTime.MinValue)
                return value;
        
        DateTime dt;
        if (!DateTime.TryParse(value as string, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt))
            return dt != DateTime.MinValue ? value : null;
        return dt;
    
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    
        if (value == null && targetType.FullName == "System.DateTime")
            return DateTime.MinValue;
        return value;
    

要在 RadDatePicker 的绑定中使用它,只需将转换器作为资源添加到 XAML 中,然后将转换器添加到绑定中。

在您的 XAML 命名空间声明中,您必须添加转换器的命名空间,例如:

xmlns:converters="clr-namespace:MyNamespace.Converters"

然后在 XAML 的“资源”部分中,您将拥有:

<UserControl.Resources>
    <converters:EditDateConverter x:Name="NullableDate"/>
</UserControl.Resources>

然后您可以简单地将以下行添加到控件上的绑定中:

Converter=StaticResource NullableDate

如果您现在有一个空日期,则控件将显示水印(例如“输入日期”)而不是 01/01/0001。

【讨论】:

【参考方案3】:

如果您绑定不可为​​空的日期时间变量,即 (DateTime) 来控制,那么它将使用默认的 01/01/001 日期而不是 Empty.... 因此,如果您希望将默认值设为 Empty,那么只需将绑定到 (DateTime?) 的变量的数据类型更改为 (DateTime?).....

日期时间 ===> 日期时间?

效果很好……

谢谢。!!!

【讨论】:

以上是关于未设置日期时,将 RadDatePicker 的默认值设置为 NULL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用数据库检索日期设置 raddatepicker 日期

如何用c#设置raddatepicker日期输入框

设置 RadDatePicker 日期而不触发 ValueChanged

Telerik 中的日期格式问题:RadDatePicker

将日期格式转换为 raddatepicker 值的 YYYY-MM-DD

Raddatepicker textarea 在设置 enabled = true 后保持只读