【问题标题】:Datagridview some columns accept only string , numeric and and some specific formatDatagridview 某些列仅接受字符串、数字和某些特定格式
【发布时间】:2020-11-02 19:19:12
【问题描述】:

我正在研究 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 将数据插入到数据库表中,并确保列在插入数据时只接受有效格式。请指教

【问题讨论】:

    标签: c# validation datatable datagridview insertion


    【解决方案1】:

    我怀疑您没有将 KeyPress 处理程序分配给隐藏在 DataGrdivView 内的 TexBox 控件,然后环顾四周,发现了这个 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 
    }
    

    这仅允许两位数。显然,你必须应用你的约束(数字、字母、长度……),但我相信逻辑就是你所追求的。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多