DataGridView中对可输入项的格式实时校验 不是失去焦点的时候才验证 DataGridView中对可输入项的格式校验问题,要求当格式不正确时无法输入在单元格中只允许用户输入数字 在不失去焦点的时候 进行验证!也就是 没按一下键盘就验证 我在KeyPress中写了代码不起作用。 不知道为什么请各位大侠帮助一下如解除此问题 可再开散分贴谢谢大家 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以在CellBeginEdit (编辑模式启动时)CellEndEdit (编辑完成时)这两个事件中处理,我觉得应该在CellEndEdit中处理, onkeypress写成这个试试onkeypress="if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode = 0;" 如果要用js来判断,一般都是输入结束时,即失去焦点时判断,然后再获取焦点当然如果有些字符是不能输入的也可以在键盘事件的keydown中写过滤方法 DataGridView.CellEnter 事件在 DataGridView 控件中的当前单元格更改或者该控件接收到输入焦点时发生。 http://rustemsoft.com/datagridview_columns2.htm#2使用 DataGridView NumericUpDown Column 或者 DataGridView Numeric Column看看 //这个好像也能用,不过个人感觉控制范围太大了.onkeypress写成这个试试onkeypress="if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode = 0;"如果cell有类似于textchange事件,在其中处理最好了. 编辑 DataGridView众所周知,DataGrid 的用户输入功能很不灵活,您几乎没有办法自定义单元格验证方式及错误报告方式。而另一方面,DataGridView 允许您通过对在编辑过程的所有阶段中引发的大量不同事件做出反应来控制其行为。默认情况下,当用户用鼠标双击单元格或按 F2 键时,DataGridView 单元格将进入编辑模式。您还可以通过将 DataGridView.EditCellOnEnter 属性设置为 True,对 DataGridView 进行配置,以便当用户移到该单元格后,该单元格立即切换到编辑模式。您还可以使用 DataGridView 的 BeginEdit()、CancelEdit()、CommitEdit() 和 EndEdit() 方法通过编程方式开始和停止单元格编辑。用户编辑单元格时,行标题将显示一个铅笔状的编辑图标。用户可以通过按 Esc 键来取消编辑。如果将 EditCellOnEnter 属性设置为 True,则单元格仍将处于编辑模式,但是所有更改都将被放弃。要提交更改,用户只需移到新的单元格,或将焦点切换到其他控件。如果您的代码可以移动当前单元格的位置,则此代码也会提交更改。为防止单元格被编辑,可以设置 DataGridViewCell、DataGridViewColumn、DataGridViewRow 或 DataGridView 的 ReadOnly 属性(取决于您是要防止对该单元格进行更改、对该列中的所有单元格进行更改、对该行中的所有单元格进行更改,还是要防止对该表中的所有单元格进行更改)。 DataGridView 还提供了 CellBeginEdit 事件,用于取消尝试的编辑。详见http://www.microsoft.com/china/msdn/library/langtool/vsdotnet/vs05a9.mspx?mfr=true 各位 同事以上是 本地应用程序 而非 web程序 在其他事件中做private void txtSMSServerNO_KeyDown(object sender, KeyEventArgs e) { //只可输入数字 //Keys a = e.KeyCode; e.SuppressKeyPress = (e.KeyCode == Keys.Space || e.KeyCode == Keys.OemBackslash || e.KeyCode == Keys.OemCloseBrackets || e.KeyCode == Keys.Oemcomma || e.KeyCode == Keys.OemOpenBrackets || e.KeyCode == Keys.OemPipe || e.KeyCode == Keys.Oemplus || e.KeyCode == Keys.OemQuestion || e.KeyCode == Keys.OemQuotes || e.KeyCode == Keys.OemSemicolon || e.KeyCode == Keys.Oemtilde || e.KeyCode == Keys.Multiply || e.KeyCode == Keys.LControlKey || e.KeyCode == Keys.Divide || e.KeyCode == Keys.Decimal || e.KeyCode == Keys.Subtract || e.KeyCode == Keys.RControlKey || e.KeyCode == Keys.A || e.KeyCode == Keys.Add || e.KeyCode == Keys.B || e.KeyCode == Keys.C || e.KeyCode == Keys.D || e.KeyCode == Keys.E || e.KeyCode == Keys.F || e.KeyCode == Keys.G || e.KeyCode == Keys.H || e.KeyCode == Keys.I || e.KeyCode == Keys.K || e.KeyCode == Keys.L || e.KeyCode == Keys.M || e.KeyCode == Keys.N || e.KeyCode == Keys.O || e.KeyCode == Keys.P || e.KeyCode == Keys.Q || e.KeyCode == Keys.R || e.KeyCode == Keys.S || e.KeyCode == Keys.T || e.KeyCode == Keys.U || e.KeyCode == Keys.V || e.KeyCode == Keys.W || e.KeyCode == Keys.J || e.KeyCode == Keys.X || e.KeyCode == Keys.Y || e.KeyCode == Keys.Z || e.KeyCode == Keys.OemPeriod || e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Shift || e.KeyCode == Keys.End || e.KeyCode == Keys.RShiftKey || e.KeyCode == Keys.RMenu ); } //搞定,只能输入数字。 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { KeyEventArgs kea = new KeyEventArgs(keyData); if (this.dataGridView1.IsCurrentCellInEditMode && kea.KeyValue >= 48 && kea.KeyValue <= 57) { if (dataGridView1.CurrentCell == null) { return true ; } if (dataGridView1.CurrentCell.Value == null) { dataGridView1.CurrentCell.Value = ""; } return base.ProcessCmdKey(ref msg, keyData); } else { return true; } } 非常紧急,请问有没有办法解决关于蓝牙设备的软件开发兼容性问题?? Point是定义什么呀? 读取TXT时的奇怪问题求解 ComboBox绑定数据源 C#.net 2005开发的web程序连接sqlserver2000服务器出现错误 求助!!急 父类中能获取子类的类名吗 请问兄弟们,地磅称重串口如何获取称重数据 紧急!请教一个listView的问题,分不够再加 VS.NET开发环境的WIN FORM中怎样加入ActiveX控件?用什么工具条? SerialPort 接收不到数据,搞了一晚上了,求高手帮助(串口通信) ^o^ 关于C#绘制字符串的问题....
CellBeginEdit (编辑模式启动时)
CellEndEdit (编辑完成时)
这两个事件中处理,我觉得应该在CellEndEdit中处理,
在 DataGridView 控件中的当前单元格更改或者该控件接收到输入焦点时发生。
使用 DataGridView NumericUpDown Column 或者 DataGridView Numeric Column看看
onkeypress写成这个试试onkeypress="if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode = 0;"如果cell有类似于textchange事件,在其中处理最好了.
以上是 本地应用程序 而非 web程序
在其他事件中做
private void txtSMSServerNO_KeyDown(object sender, KeyEventArgs e)
{
//只可输入数字
//Keys a = e.KeyCode;
e.SuppressKeyPress = (e.KeyCode == Keys.Space || e.KeyCode == Keys.OemBackslash ||
e.KeyCode == Keys.OemCloseBrackets || e.KeyCode == Keys.Oemcomma ||
e.KeyCode == Keys.OemOpenBrackets || e.KeyCode == Keys.OemPipe ||
e.KeyCode == Keys.Oemplus || e.KeyCode == Keys.OemQuestion || e.KeyCode == Keys.OemQuotes ||
e.KeyCode == Keys.OemSemicolon || e.KeyCode == Keys.Oemtilde || e.KeyCode == Keys.Multiply || e.KeyCode == Keys.LControlKey ||
e.KeyCode == Keys.Divide || e.KeyCode == Keys.Decimal || e.KeyCode == Keys.Subtract || e.KeyCode == Keys.RControlKey ||
e.KeyCode == Keys.A || e.KeyCode == Keys.Add || e.KeyCode == Keys.B ||
e.KeyCode == Keys.C || e.KeyCode == Keys.D || e.KeyCode == Keys.E || e.KeyCode == Keys.F ||
e.KeyCode == Keys.G || e.KeyCode == Keys.H || e.KeyCode == Keys.I || e.KeyCode == Keys.K ||
e.KeyCode == Keys.L || e.KeyCode == Keys.M || e.KeyCode == Keys.N || e.KeyCode == Keys.O ||
e.KeyCode == Keys.P || e.KeyCode == Keys.Q || e.KeyCode == Keys.R || e.KeyCode == Keys.S ||
e.KeyCode == Keys.T || e.KeyCode == Keys.U || e.KeyCode == Keys.V || e.KeyCode == Keys.W || e.KeyCode == Keys.J ||
e.KeyCode == Keys.X || e.KeyCode == Keys.Y || e.KeyCode == Keys.Z || e.KeyCode == Keys.OemPeriod || e.KeyCode == Keys.ShiftKey ||
e.KeyCode == Keys.Shift || e.KeyCode == Keys.End || e.KeyCode == Keys.RShiftKey || e.KeyCode == Keys.RMenu
); }
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
KeyEventArgs kea = new KeyEventArgs(keyData);
if (this.dataGridView1.IsCurrentCellInEditMode && kea.KeyValue >= 48 && kea.KeyValue <= 57)
{
if (dataGridView1.CurrentCell == null)
{
return true ;
}
if (dataGridView1.CurrentCell.Value == null)
{
dataGridView1.CurrentCell.Value = "";
}
return base.ProcessCmdKey(ref msg, keyData);
}
else
{
return true;
}
}