未设置日期时,将 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="" />
【讨论】:
我该如何解决并非总是可以将数据类型从 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 日期
设置 RadDatePicker 日期而不触发 ValueChanged
Telerik 中的日期格式问题:RadDatePicker