DateTime列的数据绑定格式

本文关键字:格式 数据绑定 DateTime | 更新日期: 2023-09-27 17:47:46

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

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

例如:

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

应为无效日期,但其格式为01-02-0200

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

DateTime列的数据绑定格式

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

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

允许的范围将取决于应用程序。例如,以下代码将日期时间限制为可以存储在SQLServer2005DATETIME列中的值(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;
    }
}

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