代码之家  ›  专栏  ›  技术社区  ›  benPearce

日期时间列的数据绑定格式

  •  0
  • benPearce  · 技术社区  · 16 年前

    我有一个文本框 文本 属性绑定到数据集列,数据类型设置为System.DateTime。
    绑定上的FormatString设置为 DD MMYYYY .

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

    例如:

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

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

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   to StackOverflow    16 年前

    .NET日期时间在01/01/0001到31/12/9999 23:59:59.9999999范围内,因此01/01/200被认为是有效的。

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

    允许的范围将取决于应用程序。例如,以下代码将日期时间限制为可以存储在SQL Server 2005日期时间列(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
  •  0
  •   dove    16 年前

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