Winforms 接受字符串值的双精度类型的DataColumn

Winforms 接受字符串值的双精度类型的DataColumn,winforms,datatable,decimal,datacolumn,Winforms,Datatable,Decimal,Datacolumn,我感到惊讶的是,在数据绑定到数据表的DataGridView上,强制显示带2位小数的十进制值的问题的解决方案是: DataRow newRow = this.MenuDataTable.NewRow(); newRow["Price"] = menuItem.Price.ToString("0.00"); 而Price列本身被设置为Decimal类型(并且在解决方案中插入的对象是字符串)。就在那时,我注意到对象DataRow接受任何object类型,这显然是我最初没有想到的原因 我现在

我感到惊讶的是,在数据绑定到
数据表的
DataGridView
上,强制显示带2位小数的
十进制值的问题的解决方案是:

DataRow newRow = this.MenuDataTable.NewRow();    
newRow["Price"] = menuItem.Price.ToString("0.00");
Price
列本身被设置为
Decimal
类型(并且在解决方案中插入的对象是
字符串
)。就在那时,我注意到对象
DataRow
接受任何
object
类型,这显然是我最初没有想到的原因

我现在的困境是“这样做真的安全吗?”。实际上,在将数据插入
DataTable
之前,我首先验证了数据,如下所示:

        if (!decimal.TryParse(this.Price, out outDecimal))
        {
            throw new InvalidUserValuesException("Price must be a number");
        }
        if (outDecimal < 0)
        {
            throw new InvalidUserValuesException("Price must be a positive number");
        }
        if (Decimal.Round(outDecimal, 2) != outDecimal)
        {
            throw new InvalidUserValuesException("Price must only have two decimal places");
        }
        if (this.Price.Length > 10)
        {
            throw new InvalidUserValuesException("Price must not exceed 10 characters");
        }
if(!decimal.TryParse(this.Price,out out-decimal))
{
抛出新的InvalidUserValuesException(“价格必须是数字”);
}
如果(输出小数<0)
{
抛出新的InvalidUserValuesException(“价格必须是正数”);
}
if(十进制四舍五入(outDecimal,2)!=outDecimal)
{
抛出新的InvalidUserValuesException(“价格必须只有两位小数”);
}
如果(this.Price.Length>10)
{
抛出新的InvalidUserValuesException(“价格不得超过10个字符”);
}

我相信答案是简单明了的,我只是想让自己不再担心我的应用程序将来会崩溃。

“我很惊讶我的问题解决方案是强制在数据表上显示两位小数…”你在说什么问题?没有“在数据表中显示”这样的事情。显示是表示术语,与数据无关。你说得对。我的解释中确实遗漏了一些要点。我已经编辑了这个问题。谢谢