输入字符串的格式不正确c#错误

输入字符串的格式不正确c#错误,c#,winforms,ms-access,C#,Winforms,Ms Access,我已经创建了一个应用程序,其中的信息基于数据库中的信息 当用户键入数据库中存在的代码时,信息将显示出来并填充剩余的文本框 这是我的数据库: 这是我键入“SM0001”时程序的屏幕截图 请注意,在“产品代码文本框”中键入“SM0001”之前,“数量文本框”、“说明文本框”、“小计文本框”和“总计文本框”均为空 当我在“产品代码文本框”中键入“SM0001”时,它会显示属于我输入的代码的所有数据 注意:数据库中的价格是计划中的小计 我的问题是: 当我在“产品代码文本框”(我输入的代码不在数据库中

我已经创建了一个应用程序,其中的信息基于数据库中的信息

当用户键入数据库中存在的代码时,信息将显示出来并填充剩余的文本框

这是我的数据库:

这是我键入“SM0001”时程序的屏幕截图

请注意,在“产品代码文本框”中键入“SM0001”之前,“数量文本框”、“说明文本框”、“小计文本框”和“总计文本框”均为空

当我在“产品代码文本框”中键入“SM0001”时,它会显示属于我输入的代码的所有数据

注意:数据库中的价格是计划中的小计

我的问题是: 当我在“产品代码文本框”(我输入的代码不在数据库中,数据库中只有产品代码“SM0001”)中键入“SM0002”时,程序停止并向我发出错误“输入字符串格式不正确”,并指向此处:

price = Convert.ToDecimal(this.numericTextBox2.Text);
以下是必要的代码:

private void textBox_TextChanged(object sender, EventArgs e)
        {
            UpdatePrice(sender, e);
        }

private void UpdatePrice(object sender, EventArgs e)
        {
            decimal quantity = 0;
            decimal price = 0;
            int total = 0;

            if (numericTextBox1.TextLength == 6)
            {
                this.numericUpDown1.Enabled = true;

                quantity = Convert.ToInt32(this.numericUpDown1.Value);
                price = Convert.ToDecimal(this.numericTextBox2.Text);
                total = Convert.ToInt32(quantity * price);

                if (numericUpDown1.Value > 0)
                {
                    this.numericTextBox3.Text = total.ToString();
                }
            }

            else if (numericTextBox1.TextLength != 6)
            {
                this.numericUpDown1.Enabled = false;

                this.textBox5.Text = "";
                this.numericUpDown1.Value = 0;
                this.numericTextBox2.Text = "";
                this.numericTextBox3.Text = "";
            }

            else
            {
                quantity = 0;
                price = 0;
                total = 0;

                MessageBox.Show("There is no data based on your selection", "Error");
            }
谁能帮我一下吗


“产品代码文本框为NumericTextBox1”、“小计文本框为NumericTextBox2”和“总计文本框为NumericTextBox3”

转换前,请将其选中为空或为空 像


转换之前,请检查它是否为null或空 像


如果你的例外情况在这里

price = Convert.ToDecimal(this.numericTextBox2.Text);
并且您的产品代码SM0002不存在,那么这意味着您正在解析一个不存在的值。所以在这种情况下,你需要一些处理机制

使用TryParse,可以处理任何不可解析的值并返回所需的值。 您可以使用以下方法:

private double ParseDouble(string value)
{
  double d=0;
  if(!double.TryParse(value , out d))
  {
      return 0;
  }
  return d;
}
因此,您的代码应该是这样的,需要进行任何转换

var price = ParseDouble(numericTextBox1.Text);

如果你的例外情况在这里

price = Convert.ToDecimal(this.numericTextBox2.Text);
并且您的产品代码SM0002不存在,那么这意味着您正在解析一个不存在的值。所以在这种情况下,你需要一些处理机制

使用TryParse,可以处理任何不可解析的值并返回所需的值。 您可以使用以下方法:

private double ParseDouble(string value)
{
  double d=0;
  if(!double.TryParse(value , out d))
  {
      return 0;
  }
  return d;
}
因此,您的代码应该是这样的,需要进行任何转换

var price = ParseDouble(numericTextBox1.Text);

如果你将文本框命名为含义,而不是
numericTextBox1
numericTextBox2
等,这将非常有帮助。事实上,在
numericTextBox1.Length
的条件下,你实际上根本没有使用
numericTextBox1
,这是非常可疑的,但我们不知道哪个文本框对应哪个变量。
numericTextBox1
是正在键入的文本框吗?因为如果是这样,则在键入前一个字符时,您会将
numericTextBox2.Text
设置为“”。目前,你的问题太难理解,无法真正帮助你……如果你将文本框命名为含义,而不是
numericTextBox1
,那将非常有帮助,
numericTextBox2
等。在关于
numericTextBox1.Length
的条件下,您实际上根本没有使用
numericTextBox1
这一事实令人深感怀疑,但我们不知道哪个文本框对应于哪个变量。
numericTextBox1
是正在键入的文本框吗?因为如果是这样,则在键入前一个字符时,您会将
numericTextBox2.Text
设置为“”。目前,你的问题太难理解,无法真正帮助你。。。