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

时间:2012-04-18 09:57:01

标签: .net silverlight-4.0 telerik telerik-grid

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

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

预期结果===> experation_date:{空白}

3 个答案:

答案 0 :(得分:1)

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

RadDatePicker1.SelectedDate = null;

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

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

答案 1 :(得分:1)

并不总是可以将数据类型从DateTime更改为DateTime?因为事实上可能需要DateTime对象。 (典型情况是当您的控件绑定到具有DateTime类型的数据库对象但您正忙于在控件中创建新记录时,此时该值仍为空。)在这种情况下,可以像保罗那样在以下链接中编写一个值转换器: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}

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

答案 2 :(得分:0)

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

DateTime ===&gt;日期时间?

工作正常......

谢谢。!!!