Datagridview的某些列仅接受字符串,数字和某些特定格式

时间:2020-11-02 19:19:12

标签: c# validation datatable datagridview insertion

我正在使用Datagridview,并且有多列。有些列必须仅接受数字值,有些列仅接受字符串,而某些列接受特定格式,例如0000-0000-0000。我使用了以下代码:

 private void adgUser_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (adgUser.CurrentCell.ColumnIndex == 0)
        {
            e.Control.KeyPress -= AllowLettersOnly;
            e.Control.KeyPress += AllowLettersOnly;
        }
        if (adgUser.CurrentCell.ColumnIndex == 1)
        {
            e.Control.KeyPress -= AllowLettersOnly;
            e.Control.KeyPress += AllowLettersOnly;
        }

        if (adgUser.CurrentCell.ColumnIndex == 2)
        {
            e.Control.KeyPress -= AllowNumbersOnly;
            e.Control.KeyPress += AllowNumbersOnly;
        }           
    }       

    private void AllowNumbersOnly(Object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
            e.Handled = true;
    }
    private void AllowLettersOnly(Object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar))
            e.Handled = true;
    }

现在,此代码无法正常工作。我正在通过datagridview将数据插入数据库表,并确保列在插入数据时仅接受有效格式。请指教

1 个答案:

答案 0 :(得分:0)

我怀疑您没有为隐藏在KeyPress内的TexBox控件分配DataGrdivView处理程序,环顾四周,发现了这个solution,将其应用于您的示例,它按预期工作:

private void adgUser_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    TextBox txtEdit = e.Control;
    txtEdit.MaxLength = 2;

    // remove any existing handler
    txtEdit.KeyPress -= txtdgvDiaryEdit_Keypress;
    txtEdit.KeyPress += txtdgvDiaryEdit_Keypress;
}

private void txtdgvDiaryEdit_Keypress(object sender, Global.System.Windows.Forms.KeyPressEventArgs e)
{
    // Test for numeric value or backspace 
    if (Information.IsNumeric(e.KeyChar.ToString()) | e.KeyChar == (char)Keys.Back)
    {
        e.Handled = false; // if numeric  
    }
    else
    {
        e.Handled = true;
    }  // if non numeric 
}

这仅允许两位数。显然,您必须应用约束(数字,字母,长度等),但是我相信逻辑就是您要遵循的。

相关问题