DataGridview控件中的货币类型转数值类型问题
根据开发需求,datagridview控件的某个单元格需要显示货币类型。它的效果如图:
设置方法为:
步骤一:
选择datagridview控件的编辑列。
步骤二:点击外观DefaultCellStyle的默认单元格样式,选择C2。这时运行时就会显示图一显示的样式。
问题:
那么在单元格录入货币类型数值后,需要参与计算时,必须将货币类型转换成数字类型。这时候问题来了。测试了很多方法总是报错。
下面就给出正确的代码:
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);
希望本贴对于开发类似项目的人有帮助。