方法一:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.CellStyle.BackColor = Color.Aquamarine;//设置编译时的颜色
TextBox control = (TextBox)((DataGridView)sender).CurrentCell.DataGridView.EditingControl;
if (((DataGridView)sender).CurrentCell.ColumnIndex == 2 || ((DataGridView)sender).CurrentCell.ColumnIndex == 3) //第2,3行只能输入正整数,小数
{
control.KeyPress += new KeyPressEventHandler(cotrol_KeyPress);//用自定义函数来判断
}
}
private void cotrol_KeyPress(object sender, KeyPressEventArgs e)//自定义函数
{
//验证正整数,小数
if (e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 46 && !char.IsNumber(e.KeyChar)) e.Handled = true;
int a = 0;
try
{
a = ((DataGridViewTextBoxEditingControl)sender).Text.ToString().Trim().Split('.').Length;
}
catch { }
if (e.KeyChar == 46 && a > 1) e.Handled = true;
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//验证日期格式
DateTime dtime;
if (e.ColumnIndex == 4)
{
if (DateTime.TryParse(dataGridView1.CurrentCell.Value.ToString().Trim(),out dtime))
{
//dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;//如果改正错误,取消行提示
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = string.Empty;//如果改正错误,取消单元格提示
}
else
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "输入内容不符合规范!";
dataGridView1.CancelEdit();
}
}
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].IsNewRow) return;
decimal dci;
if (e.ColumnIndex == 4)
{
if (e.FormattedValue != null && e.FormattedValue.ToString().Length > 0)
{
if (!decimal.TryParse(e.FormattedValue.ToString(), out dci) || dci < 0)
{
e.Cancel = true;
MessageBox.Show("请输入数字或小数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
e.CellStyle.BackColor = Color.Aquamarine;//设置编译时的颜色
TextBox control = (TextBox)((DataGridView)sender).CurrentCell.DataGridView.EditingControl;
if (((DataGridView)sender).CurrentCell.ColumnIndex == 2 || ((DataGridView)sender).CurrentCell.ColumnIndex == 3) //第2,3行只能输入正整数,小数
{
control.KeyPress += new KeyPressEventHandler(cotrol_KeyPress);//用自定义函数来判断
}
}
private void cotrol_KeyPress(object sender, KeyPressEventArgs e)//自定义函数
{
//验证正整数,小数
if (e.KeyChar != 8 && e.KeyChar != 13 && e.KeyChar != 46 && !char.IsNumber(e.KeyChar)) e.Handled = true;
int a = 0;
try
{
a = ((DataGridViewTextBoxEditingControl)sender).Text.ToString().Trim().Split('.').Length;
}
catch { }
if (e.KeyChar == 46 && a > 1) e.Handled = true;
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//验证日期格式
DateTime dtime;
if (e.ColumnIndex == 4)
{
if (DateTime.TryParse(dataGridView1.CurrentCell.Value.ToString().Trim(),out dtime))
{
//dataGridView1.Rows[e.RowIndex].ErrorText = String.Empty;//如果改正错误,取消行提示
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = string.Empty;//如果改正错误,取消单元格提示
}
else
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "输入内容不符合规范!";
dataGridView1.CancelEdit();
}
}
}
方法二:(datagridview取消编辑时,会报错)
private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].IsNewRow) return;
decimal dci;
if (e.ColumnIndex == 4)
{
if (e.FormattedValue != null && e.FormattedValue.ToString().Length > 0)
{
if (!decimal.TryParse(e.FormattedValue.ToString(), out dci) || dci < 0)
{
e.Cancel = true;
MessageBox.Show("请输入数字或小数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}