各位大哥,昨天我用这个实现了只输入数字,怎样加入让输入的数字保留两位小数呢??
  private void dataGridViewDebug_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            // dataGridViewDebug的7、8、9、10列只能输入数字跟小数点
            if (e.ColumnIndex == 7 || e.ColumnIndex == 8 || e.ColumnIndex == 9 || e.ColumnIndex == 10)
            {
                try
                {
                    // 如果输入的格式化数值是空值执行
                    if (String.IsNullOrEmpty(e.FormattedValue.ToString()))
                    {
                        MessageBox.Show("输入不能为空!");
                        // 通过事件名柄将输入操作取消
                        e.Cancel = true;
                    }
                    // 将单元格输入的格式化数值转换成高精度浮点型   
                    else
                    {
                        decimal val = decimal.Parse(e.FormattedValue.ToString());
                    }
                }
                catch 
                {
                    MessageBox.Show("输入中有无效字符,只能输入数字!");
                    // 通过事件名柄将输入操作取消
                    e.Cancel = true;
                }
            } 

解决方案 »

  1.   

    1) 在 CellFormating 中处理,是显示还是保存?
    2)参考拙文:定制DataGridView的数值编辑元素:Edit Control、Column与Cell
      

  2.   


    private void dataGridViewDebug_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
            { 
                // dataGridViewDebug的7、8、9、10列只能输入数字跟小数点 
                if (e.ColumnIndex == 7 || e.ColumnIndex == 8 || e.ColumnIndex == 9 || e.ColumnIndex == 10) 
                { 
                    try 
                    { 
                        // 如果输入的格式化数值是空值执行 
                        if (String.IsNullOrEmpty(e.FormattedValue.ToString())) 
                        { 
                            MessageBox.Show("输入不能为空!"); 
                            // 通过事件名柄将输入操作取消 
                            e.Cancel = true; 
                        } 
                        // 将单元格输入的格式化数值转换成高精度浮点型  
                        else 
                        { 
                            decimal val = decimal.Parse(e.FormattedValue.ToString("0.00")); 
                        } 
                    } 
                    catch 
                    { 
                        MessageBox.Show("输入中有无效字符,只能输入数字!"); 
                        // 通过事件名柄将输入操作取消 
                        e.Cancel = true; 
                    } 
                } 
      

  3.   

    测试:
     decimal number = 11.2561m;
     Response.Write(number.ToString("0.00"));
      

  4.   


    private void dataGridViewDebug_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
            { 
                // dataGridViewDebug的7、8、9、10列只能输入数字跟小数点 
                if (e.ColumnIndex == 7 || e.ColumnIndex == 8 || e.ColumnIndex == 9 || e.ColumnIndex == 10) 
                { 
                    try 
                    { 
                        // 如果输入的格式化数值是空值执行 
                        if (String.IsNullOrEmpty(e.FormattedValue.ToString())) 
                        { 
                            MessageBox.Show("输入不能为空!"); 
                            // 通过事件名柄将输入操作取消 
                            e.Cancel = true; 
                        } 
                        // 将单元格输入的格式化数值转换成高精度浮点型  
                        else 
                        { 
                            decimal val = decimal.Parse(e.FormattedValue.ToString()); 
                            val=Convert.ToDecimal(val.ToString("0.00"));
                        } 
                    } 
                    catch 
                    { 
                        MessageBox.Show("输入中有无效字符,只能输入数字!"); 
                        // 通过事件名柄将输入操作取消 
                        e.Cancel = true; 
                    } 
                } 
      

  5.   

    tostring(“f2”)
      

  6.   

    设置DataGridViewCellStyle { Format=N2 }
      

  7.   

    5楼的正解
    应该是tostring(“f2”)
      

  8.   

    设置成这样是不是所有的cell输入都是这样了?
    可以用正则表达式验证下吗。
    参考下:
     private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
            {
                decimal dcm = 0;
                if (VlidateData(e.FormattedValue.ToString()))
                {
                    dcm = decimal.Parse(e.FormattedValue.ToString());
                }
                else
                {
                    MessageBox.Show("输入无效!");
                    e.Cancel = true;
                    
                }
                
            }
            private static bool VlidateData(string data)
            {
                return System.Text.RegularExpressions.Regex.IsMatch(data, @"^[0-9]+[.]{1}([0-9]{2}){1}$");
            }
      

  9.   

    decimal val = decimal.Parse(e.FormattedValue.ToString(“0.00”));
    这样是不行的。。错误提示 decimal val = decimal.Parse(e.FormattedValue.ToString()); 
    val=Convert.ToDecimal(val.ToString("0.00"));
    这样的话,val的值是有两位小数了,但没有返回给单元格。帮帮忙呀。