日期:2014-05-18 浏览次数:21014 次
[Quote=引用:] 引用: C# code private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == 2)//时间列 { if (e.RowInde…… 对于字段本身就是datetime来说,如果输入的格…… [/Quote] private void dataGridView1_RowValidating(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == 2)//时间列 { if (e.RowIndex > 0) { try { } catch (Exception ) { MessageBox.Show("日期格式不正确!"); } } } }
------解决方案--------------------
鉴于楼主这么奇怪的要求做出的奇怪改法
/// <summary> /// CellValidating事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { const int dateColumnIndex = 0;// 设定你的那个列的序号,这里假设是第0列 if (e.ColumnIndex == dateColumnIndex && e.FormattedValue.ToString() != string.Empty)// 当前编辑的单元格在那个列内,并且单元格里面填了文本,包括空格 { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(@"^2012\-\d{2}\-\d{2}$");// 正则表达式,对应楼主奇怪的要求,只能输入2012-XX-XX,而且XX必须是数字,而且不能是一个X,必须两个Xo(╯□╰)o DateTime dt; if (!regex.IsMatch(e.FormattedValue.ToString()) || !DateTime.TryParse(e.FormattedValue.ToString(), out dt))// 匹配正则失败,又或者是匹配正确,但不是时间类型 { MessageBox.Show("Error!!!");// 报个错 e.Cancel = true;// 最重要的一步,将Cancel设为true,表示验证不通过,如果不设的话,就表示默认验证通过,就算你上面报错也没用,焦点一样会离开当前编辑的单元格 } } }