我正在C#dot Net开发一个销售点应用程序,其中包含一个datagridview。
我想将datagridview的某些单元格值限制为以下内容。
在这种情况下引导我。
以下是我的代码
private void Numeric_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != 46)
//if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true;
}
// only allow one decimal point
if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1) && ((sender as TextBox).Text.IndexOf('.') != 1))
{
e.Handled = true;
}
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.Control.KeyPress -= new KeyPressEventHandler(Numeric_KeyPress);
if (dataGridView1.CurrentCell.ColumnIndex == 1)
{
TextBox tb = e.Control as TextBox;
if (tb != null)
{
tb.KeyPress += new KeyPressEventHandler(Numeric_KeyPress);
}
}
}
答案 0 :(得分:0)
最简单的方法是处理CurrentCellDirtyStateChanged
事件。
我使用正则表达式来验证值。此代码允许您仅输入包含负数的数字。
private void DataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
var cell = dataGridView.CurrentCell;
if (cell.ColumnIndex != 1)
return;
string value = cell.EditedFormattedValue.ToString();
string pattern = @"^-$ | ^-?0$ | ^-?0\.\d*$ | ^-?[1-9]\d*\.?\d*$";
if (Regex.IsMatch(value, pattern, RegexOptions.IgnorePatternWhitespace))
{
dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
else
{
dataGridView.CancelEdit();
}
}
注意:此代码不允许用户在自己的文化中输入数字。