DataGridview控件中的货币类型转数值类型问题

根据开发需求,datagridview控件的某个单元格需要显示货币类型。它的效果如图:

DataGridview控件中的货币类型转数值类型问题

设置方法为:

步骤一:

选择datagridview控件的编辑列。

DataGridview控件中的货币类型转数值类型问题

步骤二:点击外观DefaultCellStyle的默认单元格样式,选择C2。这时运行时就会显示图一显示的样式。

DataGridview控件中的货币类型转数值类型问题

问题:

那么在单元格录入货币类型数值后,需要参与计算时,必须将货币类型转换成数字类型。这时候问题来了。测试了很多方法总是报错。

下面就给出正确的代码:

           decimal InMoney=0, OutMoney=0;
            for (int i = 0; i < Dgv.RowCount; i++) 
            {
                //判断关键凭证名称单元格是否是空,空就跳过
                if (Dgv.Rows[i].Cells["SubjectName"].EditedFormattedValue == null || Dgv.Rows[i].Cells["SubjectName"].EditedFormattedValue.ToString() == "")
                {
                    MessageBox.Show("凭证明细中科目名称不能为空!", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Dgv.CurrentCell = Dgv.Rows[i].Cells["SubjectName"];
                    return;
                }
                InMoney+= Dgv.Rows[i].Cells["InMoney"].Value.ToString().Length ==0? 0 : Decimal.Parse(Dgv.Rows[i].Cells["InMoney"].Value.ToString().Replace(" ", ""),NumberStyles.AllowThousands
   | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);//将货币类型转换成数值类型的关健代码
                OutMoney += Dgv.Rows[i].Cells["InMoney"].Value.ToString().Length == 0 ? 0 : Decimal.Parse(Dgv.Rows[i].Cells["OutMoney"].Value.ToString().Replace(" ", ""), NumberStyles.AllowThousands
   | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);//将货币类型转换成数值类型的关健代码
                if (InMoney == 0 && OutMoney == 0)
                {
                    MessageBox.Show("借方或贷方金额不能同时为0或为空!", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Dgv.CurrentCell = Dgv.Rows[i].Cells["InMoney"];
                    Dgv.BeginEdit(true);
                    return;
                }
              
            }
            if (InMoney != OutMoney)
            {
                MessageBox.Show("借方金额合计和贷方金额合计不相等!", "出错提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

总结:起初一直认为将货币类型转换成数值类型是Replace掉人民币符号(¥)和逗号(,)用了下面的语句Convert.ToDecimal(Dgv.Rows[i].Cells["InMoney"].Value.ToString().Replace("¥", "").Replace(",",""))但始终报错。后来才知道原来是空格的问题。所以采用了下面的语句就正确了。

Decimal.Parse(Dgv.Rows[i].Cells["OutMoney"].Value.ToString().Replace(" ", ""), NumberStyles.AllowThousands
   | NumberStyles.AllowDecimalPoint | NumberStyles.AllowCurrencySymbol);

希望本贴对于开发类似项目的人有帮助。