日期:2014-05-18  浏览次数:20962 次

datagridview中一列定义为datetime,只允许输入2012-xx-xx格式,输入其他的抛出异常,如何做?
datagridview中一列定义为datetime,只允许输入2012-xx-xx格式,输入其他的抛出异常,如何做?

------解决方案--------------------
C# code
[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("日期格式不正确!");
            }

                }
            }
        }

------解决方案--------------------
鉴于楼主这么奇怪的要求做出的奇怪改法
C# code

        /// <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,表示验证不通过,如果不设的话,就表示默认验证通过,就算你上面报错也没用,焦点一样会离开当前编辑的单元格
                }
            }
        }