DataGridView中对可输入项的格式校验问题,要求当格式不正确时无法输入
在单元格中只允许用户输入数字   在不失去焦点的时候 进行验证!也就是 每按一下键盘就验证 错误的数据根本无法录入. 
  DataGridView中不使用模板列 如textbox
请各位大侠提供应用程序的解决方案,非web程序如解决此问题 可再开散分贴!谢谢大家

解决方案 »

  1.   

    //实在不行还是用这个方法吧.
    //用这个
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                //
                if(gridview得到光标 && 当前单元格处于编辑状态)//这个条件我写的不一定准确
                {
                     //对所有的按键处理,筛选
                     if(正确的输入)
                     {
                           return base.ProcessCmdKey(ref msg, keyData);                  }
                      else
                     {return true;}
                }
                else
                {
                     return base.ProcessCmdKey(ref msg, keyData);
                }        }
      

  2.   

    //简单把回车转换成TAB的例子。参考一下。
     protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                KeyEventArgs kea = new KeyEventArgs(keyData);
                if (kea.KeyCode == Keys.Enter)
                {
                    SendKeys.Send("{tab}");
                    return true;
                }
                else
                {
                    return base.ProcessCmdKey(ref msg, keyData);
                }
                
            }
      

  3.   

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

  4.   

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1604901&SiteID=1Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing        If TypeOf e.Control Is TextBox Then            Try                RemoveHandler e.Control.KeyPress, AddressOf txtTelNo_KeyPress            Catch ex As Exception             End Try            AddHandler e.Control.KeyPress, AddressOf txtTelNo_KeyPress        End If    End Sub    Private Sub txtTelNo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)        Dim C As Char = e.KeyChar        If  (Char.IsDigit(C) Or Char.IsControl(C)) Then            e.Handled = True            My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Beep)        End IfEnd Sub
      

  5.   

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