/// <summary>
/// 输入格式的限制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridView3Editing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//检测是被表示的控件还是DataGridViewTextBoxEditingControl
if (e.Control is DataGridViewTextBoxEditingControl)
{ DataGridView dgv = (DataGridView)sender;
//取得被表示的控件
DataGridViewTextBoxEditingControl tb = (DataGridViewTextBoxEditingControl)e.Control; //事件处理器删除 tb.KeyPress -= new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
if (dgv.CurrentCell.OwningColumn.Name == "date3")
{ // KeyPress事件处理器追加
tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress);
}
}
}
/// <summary>
/// 对输入键盘的监控
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if ((int)e.KeyChar >= 48 & (int)e.KeyChar <= 57 | (int)e.KeyChar == 8)//| (int)e.KeyChar == 46 .符号
{
e.Handled = false;
} else {
messgeNum = messgeNum + 1;//此处避免在输入一次提示三次的信息框
if (messgeNum == 1)
{
MessageBox.Show("请输入正确的整数", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Error);//!
}
else if(messgeNum == 3)
{
messgeNum = 0;
}
e.Handled = true;
}
}
参考了解决实时更新计算列的问题的文章
private void dgv_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
//判断当前单元格是否存在未提交的更改,只有存在才继续。
//此判断有必要,因为下面的dgv.CommitEdit也会触发该事件,但此时IsCurrentCellDirty已为false,
//如果不做判断,将会重复进入,造成无谓消耗
if (dgv.IsCurrentCellDirty)
{
//将单元格值提交给数据源,dgv.EndEdit()也能做到提交,但那样会使单元格结束编辑状态
//而dgv.CommitEdit()则会保持编辑状态
//参数是提供给DataError等事件的原因
dgv.CommitEdit(DataGridViewDataErrorContexts.Commit);
//人工结束源行的编辑状态。只有这样,源行的计算列才会更新
(dgv.CurrentRow.DataBoundItem as DataRowView).EndEdit();
//或者执行DataRow的EndEdit()也能达到同样目的
//(dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit();
}
String stt = dataGridView1.CurrentCell.Value.ToString();
}
这里的stt就能取到实时输入的值了。
当你输入的值要实时制空或者 赋值,也同时实时统计数据可能需要用到
(dataGridView1.CurrentRow.DataBoundItem as DataRowView).Row.BeginEdit(); 当前行开始编辑
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
进行可在编辑的提交
如果在某种情况下需要赋值,制空等
(dataGridView1.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit();//人工结束当前行编辑
调用这个,这样制空后还能再原来的单元格进行输入值