我有一个文本框,其 Text 属性绑定到数据集列,DataType设置为System.DateTime .Binding上的FormatString设置为 dd-MM-yyyy .
当用户输入日期时,它会尝试将其转换为日期,但可能会为看似无效的日期提供一些奇怪的值 .
例如:
textBox1.Text = "01-02-200";
应该是无效日期,但它将其格式化为 01-02-0200 .
有没有一种简单的方法可以通过设置有效范围或覆盖绑定/文本框上的事件来捕获这些越界值?
.NET DateTime的范围是01/01/0001到31/12/9999 23:59:59.9999999,因此01/01/200被认为是有效的 .
您可以验证输入并限制范围:验证事件将是进行验证的地方 . 您需要将字符串解析为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 回答
.NET DateTime的范围是01/01/0001到31/12/9999 23:59:59.9999999,因此01/01/200被认为是有效的 .
您可以验证输入并限制范围:验证事件将是进行验证的地方 . 您需要将字符串解析为DateTime并验证其范围 .
允许的范围取决于应用程序 . 例如,以下代码将日期时间限制为可以存储在SQL Server 2005 DATETIME列(01-01-1753到31-12-999)中的值:
有什么理由不使用日期选择器控件而不是文本框?将解决验证问题,并可能使其成为用户更好的体验 .