我正在使用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将数据插入数据库表,并确保列在插入数据时仅接受有效格式。请指教
答案 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
}
这仅允许两位数。显然,您必须应用约束(数字,字母,长度等),但是我相信逻辑就是您要遵循的。