为什么无法仅在DataGridView中验证列的字母?

时间:2011-07-04 09:11:32

标签: c# regex winforms validation datagridview

我在c#窗口表单上做一个项目 我有一个DataGridView与数据库中的数据

现在我想在数据GridView中进行编辑,我有这个列调用Name,但我想验证,以便在用户编辑时,它只会键入字母,例如,在Name列中第1行有一个名字叫Rosy Chin,然后用户编辑到这个Rosy Ch11n ...它应该提示用户说只有字母表,我使用下面的代码,但它没有提示我那条消息...但是如果用户编辑这个4Rosy Chin ....它会出现提示信息......我能知道我错在哪里吗?

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
    {
        //int indicator;
        int newInteger;

        if (e.ColumnIndex == 1)
        {
            if (dataGridView1.Rows[e.RowIndex].IsNewRow) return;
            String data = e.FormattedValue.ToString();

             String validate= @"^[a-zA-Z]";
             Regex nameAlphabet = new Regex(validate);
             String nameGridView = data;                 
             if(!(nameAlphabet.IsMatch(nameGridView )))
             {
                 e.Cancel = true;
                 MessageBox.Show(@"Name must be in Alphabet!");
             }
             else
                 return;
        }
}

2 个答案:

答案 0 :(得分:2)

尝试修复您的RegEx:

 ^[a-zA-Z ]+$

说明

^ start of line
[a-zA-Z ] any letter or space
+ one or more
$ end of line

Good RegEx sandbox


不允许只有空格:

^[A-Za-z][a-zA-Z ]+[A-Za-z]$

链接到sandbox

答案 1 :(得分:0)

如果不按以下方式尝试

Regex nameAlphabet = new Regex(@"^[a-zA-Z\s]+$");

如果空格大于1,或者如果文本框以空格开头,您可以根据需要提出必要的消息框,则可以通过检查文本框中的空格数来以编程方式执行此操作< / p>

在您验证的代码中尝试此操作

  int cnt = 0;
    while (TextBox1.Text.Contains(" "))
    {
        cnt++;
        if (cnt > 1)
        {
            MessageBox.show("Only a space is allowed");
            break;
        }
    }

以类似的方式,您可以测试textbox是否以空格开头,如下所示

if(textbox.text.startswith(" "))
{
    // Your message
 }