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

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

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

预期结果 ===> exeration_date : {Blank}

【问题讨论】:

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


    【解决方案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?).....

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

      效果很好……

      谢谢。!!!

      【讨论】:

        猜你喜欢
        • 2016-12-28
        • 1970-01-01
        • 2012-12-30
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-07-08
        • 2016-12-29
        • 2019-05-15
        相关资源
        最近更新 更多