【问题标题】:Data binding formatting to a DateTime column数据绑定格式到 DateTime 列
【发布时间】:2008-10-30 06:57:21
【问题描述】:

我有一个文本框,其中 Text 属性绑定到 DataType 设置为 System.DateTime 的数据集列。
Binding 上的 FormatString 设置为 dd-MM-yyyy

当用户输入日期时,它会尝试将其转换为日期,但可能会为看似无效的日期提供一些奇怪的值。

例如:

textBox1.Text = "01-02-200";

应该是无效的日期,但它的格式为 01-02-0200

是否有一种简单的方法可以通过设置有效范围或覆盖绑定/文本框上的事件来捕获这些越界值?

【问题讨论】:

    标签: c# .net data-binding datetime


    【解决方案1】:

    .NET DateTime 的范围是 01/01/0001 到 31/12/9999 23:59:59.9999999,因此 01/01/200 被认为是有效的。

    您可以验证输入并限制范围:Validating 事件将是进行验证的地方。您需要将字符串解析为 DateTime 并验证其范围。

    允许的范围取决于应用程序。例如,以下代码将日期时间限制为可以存储在 SQL Server 2005 DATETIME 列中的值(01-01-1753 到 31-12-999):

    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        DateTime date;
        if (!DateTime.TryParseExact(textBox1.Text, 
            "dd-MM-yyyy", 
            CultureInfo.CurrentCulture, 
            DateTimeStyles.None, 
            out date))
        {
            MessageBox.Show(textBox1.Text + " is not a valid date");
            textBox1.Focus();
            e.Cancel = true;
            return;
        }
        if ((date < (DateTime) System.Data.SqlTypes.SqlDateTime.MinValue) ||
            (date > (DateTime) System.Data.SqlTypes.SqlDateTime.MaxValue))
        {
            MessageBox.Show(textBox1.Text + " is out of range");
            textBox1.Focus();
            e.Cancel = true;
            return;
        }
    }
    

    【讨论】:

      【解决方案2】:

      有什么理由不使用日期选择器控件而不是文本框?将解决验证问题,并可能为用户提供更好的体验。

      【讨论】:

        猜你喜欢
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2016-04-30
        相关资源
        最近更新 更多