DataGridView中对可输入项的格式校验问题,要求当格式不正确时无法输入
在单元格中只允许用户输入数字   
在不失去焦点的时候 进行验证!也就是 没按一下键盘就验证
  我在KeyPress中写了代码不起作用。 不知道为什么
请各位大侠帮助一下如解除此问题 可再开散分贴谢谢大家

解决方案 »

  1.   

    可以在
    CellBeginEdit (编辑模式启动时)
    CellEndEdit (编辑完成时)
    这两个事件中处理,我觉得应该在CellEndEdit中处理,
      

  2.   

    onkeypress写成这个试试onkeypress="if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode = 0;"
      

  3.   

    如果要用js来判断,一般都是输入结束时,即失去焦点时判断,然后再获取焦点当然如果有些字符是不能输入的也可以在键盘事件的keydown中写过滤方法
      

  4.   

    DataGridView.CellEnter 事件
    在 DataGridView 控件中的当前单元格更改或者该控件接收到输入焦点时发生。
      

  5.   

    http://rustemsoft.com/datagridview_columns2.htm#2
    使用 DataGridView NumericUpDown Column 或者 DataGridView Numeric Column看看
      

  6.   

    //这个好像也能用,不过个人感觉控制范围太大了.
    onkeypress写成这个试试onkeypress="if(window.event.keyCode<48 || window.event.keyCode>57) window.event.keyCode = 0;"如果cell有类似于textchange事件,在其中处理最好了.
      

  7.   

    编辑 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
      

  8.   

    各位 同事
    以上是 本地应用程序 而非 web程序
      

  9.   


    在其他事件中做
    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
                 );        }
      

  10.   

    //搞定,只能输入数字。 
    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;
                }
                
            }