DataGridView限制用户输入

时间:2013-03-20 06:58:10

标签: c# regex winforms input datagridview

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

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

2 个答案:

答案 0 :(得分:8)

如果要在键入时阻止无效值,可以处理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;
        }
    }

答案 1 :(得分:1)

@Ginosaji,你的代码很好但是editingControl.Text + e.KeyChar你假设用户输入控制文本末尾的最后一个字符。如果用户将char置于某个控件的中间位置会怎样?