我用VS2005,在DataGridView中有一列要求输入数字,我直接在DataGridView中添加和修改数据,有什么方法能实时的判断我那一列中的单元格输入的是不是数字?我发现DataGridView上的单元格内容改变的判断只有焦点移到别的cell里面去的时候才会触发,有没有方法在判断的时候不用离开这个单元格,能实现那种类似于textbox中的textchanged这个方法呢?

解决方案 »

  1.   


    protected void GridViewOrderLine_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                //修改编辑框样式
                if ((e.Row.RowState & DataControlRowState.Edit) != 0)
                {
                    TextBox tb1 = (TextBox)e.Row.Cells[3].Controls[0];
                    tb1.Attributes.Add("onkeypress", "var k=event.keyCode;if ( ( (k==46) || (k<=57 && k>=48) ) && isMoney(this.value,k)  ) return true;else return false;");
                    tb1.Attributes.Add("onpaste", "return false;");
                    tb1.Attributes.Add("maxlength", "10");
                    tb1.Attributes.Add("class", "TextBox");                tb1.Width = 70;
                    tb1.Text = System.Math.Round(double.Parse(tb1.Text), 2).ToString();
                 }
            }
      

  2.   

    在录入的过程中若不是数字或“.”不可写
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
           
                if ((e.KeyChar == 8 || e.KeyChar >= 48 && e.KeyChar <= 57 || e.KeyChar == '.'))
                    e.Handled = false;
                else
                    e.Handled = true;        }
      

  3.   

    如果是textbox,我当然知道了怎么做了,可这是DataGridView中的某一列啊,。
      

  4.   

    在那个“KeyPress”事件里面……
      

  5.   

    DataGridView中的“KeyPress”怎么没有反应啊?现在有个问题是 如果我在数字那列输入非数字,程序既不报错,也不往下执行了,就定在了那里,真晕了
      

  6.   

    我的DataGridView中的“KeyPress”怎么没有反应啊??我没在KeyPress下写的 直接在DataError下写的。
      

  7.   

    //验证单元格输入是否为数字或小数点
    private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e)
    {
          DataGridView dgv = (DataGridView)sender;
          //把不为数字的Column除去,判断剩余的Column
           if (dgv.Columns[e.ColumnIndex].Name != "lbmc" && dgv.Columns[e.ColumnIndex].Name!= "lbid"&&   dgv.Columns[e.ColumnIndex].Name != "sbmc" && dgv.Columns[e.ColumnIndex].Name!= "sbid")
          {
             for (int i = 0; i < e.Value.ToString().Length; i++)
             {
                 string f = e.Value.ToString().Substring(i, 1).ToString().Trim();
                 if (f != "1" && f != "2" && f != "3" && f != "4" && f != "5" && f != "6" && f != "7" && f != "8" && f != "9" && f != "0" && f != ".")
                 {
                     e.Value = "";
                 }
              }
           }
           e.ParsingApplied = true;
    }
      

  8.   

     e.ParsingApplied = true; 这句话有效果吗?能不能让程序出错的时候别执行dataerror事件
      

  9.   

    当输入非数字或小数点时 e.Value = ""; 什么也不写入
    若是数字或小数点则执行 e.ParsingApplied = true; 写入当前键值