8

是否可以通过 限制用户对DataGridView单元格的输入RegEx?例如,将单元格输入格式设置为类似这样[0-9]{2},以禁止用户输入除 2 位数字以外的内容。

更新 对不起,我不是很清楚。我知道CellValidation事件,并且我可以在用户输入后检查输入的值。但我想知道是否可以在此事件之前防止错误的用户输入。我的意思是当单元格正则表达式为[0-9]. 有可能吗?

4

2 回答 2

9

如果您想防止输入无效值,您可以处理该EditingControl.KeyPress事件。下面的示例代码。但是,您必须修改正则表达式以允许不完整的值。而且您仍然应该使用正确的验证,因为还有其他方法可以将数据放入网格中(例如复制粘贴)。

    private string pattern = "^[0-9]{0,2}$";

    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        dataGridView1.EditingControl.KeyPress -= EditingControl_KeyPress;
        dataGridView1.EditingControl.KeyPress += EditingControl_KeyPress;
    }

    private void EditingControl_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar))
        {
            Control editingControl = (Control)sender;
            if (!Regex.IsMatch(editingControl.Text + e.KeyChar, pattern))
                e.Handled = true;
        }
    }
于 2013-03-20T12:33:10.887 回答
1

@Ginosaji ,您的代码很好,但是editingControl.Text + e.KeyChar您假设用户在控制文本的末尾输入了最后一个字符。如果用户将 char 放在控件中间的某个地方怎么办?

于 2014-03-26T13:50:03.117 回答