将字符串解析为十进制会引发 DateTime 的 FormatException

Parsing string to decimal throws a FormatException for DateTime

我有一个包含不同工具数据的 Web 项目,我能够将工具插入和删除到 RadGrid(连接到数据库)中,但我在使用编辑命令时遇到问题

工具的一个值是 "Cost",它是十进制的,当我尝试编辑时,有一半的时间它会给我这个错误:

"Input String was not in correct format error"

当用户点击编辑表单模式提交编辑时,这是我的编辑方法

protected void btnMdlEditar_OnClick(object sender, EventArgs e)
       {
           NumberStyles style;
           CultureInfo provider;
           style = NumberStyles.AllowDecimalPoint;
           provider = new CultureInfo("en-US");
           decimal costoDecimal;
           var costo = editCosto.Text;
           costoDecimal = decimal.Parse(costo.ToString(),style,provider);
           try
           {
               var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
               rgHerramientas.DataBind();
               rgHerramientas.Rebind();
               upHerramientas.Update();
               this.ShowMessage(Resources.Language.mess_insert, "success");

           }
           catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
           this.CloseModal("mdlHerramientaEdit");
       }

在行

costoDecimal = decimal.Parse(costo.ToString(),style,provider);

是我收到错误的地方,弹出 FormatException,指出在将字符串解析为 DataTime 时出现问题,出于某种原因。 我不知道为什么在我的插入方法

中使用确切的代码从字符串中解析小数时会出现此错误
protected void btnAutorizar_OnClick(object sender, EventArgs e)
       {
           NumberStyles style;
           CultureInfo provider;
           style = NumberStyles.AllowDecimalPoint;
           provider = new CultureInfo("en-US");
           decimal costoDecimal;
           var costo = txtCosto.Text;
           costoDecimal = decimal.Parse(costo.ToString(),style,provider);
           try
           {

               var id = CDatos.DHerramientas.InsertHerramientas(txtCodigo.Text, txtNombreCorto.Text, txtDescripcion.Text, costoDecimal, txtConsumible.Text);
               this.upDatos.Update();
               this.ShowMessage(Resources.Language.mess_insert, "success");

           }
           catch (Exception ex){this.ShowMessage(ex.Message, "danger"); }
           this.CloseModal("mdlHerramienta");
       }

当我通过仅删除部分数字或未更改数字来编辑数据时会抛出错误,但如果我完全删除数字并输入另一个十进制数字,它允许我编辑它

7.85 to 7.89 = Error

7.85 to 6.12 = No error

我已经有了

using System.Globalization;

我现在的文化是"es-ES"

编辑: 我试图从

中删除 "provider"

costoDecimal = decimal.Parse(costo.ToString(), style, provider); which allows me to edit succesfully if I only change part of the number, but if I type a new number using "." it throws me the error again

我认为问题在于使用“.”。而不是“,”这是西班牙用于小数的方法,有没有办法同时使用“。”和“,”?

知道了,问题的根源是使用“,”而不是“.”

由于我项目的性质,我必须将文化用作整个项目的 "es-ES"。

如果是“.”使用而不是“,”它抛出错误,以便用户能够使用“。”和系统使用“,”我不得不改变代码

protected void btnMdlEditar_OnClick(object sender, EventArgs e)
        {
            NumberStyles style;
            CultureInfo provider;
            style = NumberStyles.AllowDecimalPoint;
            provider = new CultureInfo("en-US");
            decimal costoDecimal = 0;
            var costo = editCosto.Text;
            if (editCosto.Text.Contains("."))
            {
                costoDecimal = decimal.Parse(costo.ToString(), style, provider);
            }
            else if (editCosto.Text.Contains(","))
            {
                costoDecimal = decimal.Parse(costo.ToString(), style);
            }

            try
            {
                var id = CDatos.DHerramientas.UpdateHerramientas(int.Parse(txtId.Text), editCodigo.Text, editNombreCorto.Text, editDescripcion.Text, costoDecimal, editConsumible.Text);
                rgHerramientas.DataBind();
                rgHerramientas.Rebind();
                upHerramientas.Update();
                this.ShowMessage(Resources.Language.mess_insert, "success");

            }
            catch (Exception ex) { this.ShowMessage(ex.Message, "danger"); }
            this.CloseModal("mdlHerramientaEdit");
        }

根据“,”或“.”更改区域性被使用