dataGridView中单元格只能输入数字后要保使数字保留两位小数,怎么弄呀???

时间:2022-11-07 10:02:36
各位大哥,昨天我用这个实现了只输入数字,怎样加入让输入的数字保留两位小数呢??
  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;
                }
            } 

12 个解决方案

#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


引用 7 楼 LoveInterMilan 的回复:
5楼的正解 
应该是tostring(“f2”)
Y

#9


引用 6 楼 Old_Mouse 的回复:
设置DataGridViewCellStyle { Format=N2 }

设置成这样是不是所有的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}$");
        }

#10


decimal val = decimal.Parse(e.FormattedValue.ToString(“0.00”));
这样是不行的。。错误提示 

decimal val = decimal.Parse(e.FormattedValue.ToString()); 
val=Convert.ToDecimal(val.ToString("0.00"));
这样的话,val的值是有两位小数了,但没有返回给单元格。

帮帮忙呀。。。。

#11


我给你的那段代码不可以吗?

#12


学习了。。。。。。

#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


引用 7 楼 LoveInterMilan 的回复:
5楼的正解 
应该是tostring(“f2”)
Y

#9


引用 6 楼 Old_Mouse 的回复:
设置DataGridViewCellStyle { Format=N2 }

设置成这样是不是所有的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}$");
        }

#10


decimal val = decimal.Parse(e.FormattedValue.ToString(“0.00”));
这样是不行的。。错误提示 

decimal val = decimal.Parse(e.FormattedValue.ToString()); 
val=Convert.ToDecimal(val.ToString("0.00"));
这样的话,val的值是有两位小数了,但没有返回给单元格。

帮帮忙呀。。。。

#11


我给你的那段代码不可以吗?

#12


学习了。。。。。。