提问者:小点点

Datagridview列不接受窗口窗体中的空格值


我正在使用Datagridview,我有5列(3列接受唯一的日期)。对于其中一列,我正在使用CellValidating事件,并编写了以下代码:

if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{             
    if (e.ColumnIndex == 3)  
    {
        if (datagridview1.Rows[e.RowIndex].IsNewRow) 
             return;

        String data = e.FormattedValue.ToString();

        if (data != string.Empty)
        {                        
            String validate = @"(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\d\d";
            Regex nameAlphabet = new Regex(validate);
            String nameGridView = data;

            if (!(nameAlphabet.IsMatch(nameGridView)))
            {
                e.Cancel = true;
                MessageBox.Show("Please follow MM/dd/yyyy format to insert date.");
            }
            else
                return;
        }
    }
}

这个列接受'mm/dd/yyyy'格式,但是当我传递空格和调试代码时,调试器没有进入上面的代码,但是之后,我得到了下面的错误。

请告知我没有得到正确的解决方案。


共1个答案

匿名用户

请查看MessageBox的底部:

若要替换此默认对话框,请处理DataError事件。

表单中选择DataGridView组件,转到属性>;事件并双击DataError条目,Visual Studio将自动生成以下代码:

private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{

}

然后在括号之间添加处理输入错误的逻辑。

例如:

MessageBox.Show($"Wrong input! {e.Exception.Message}");
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = null;
e.ThrowException = false;