1

データベースにあるものに基づいて情報を取得するアプリケーションを作成しました。

ユーザーがデータベースに存在するコードを入力すると、情報が出てきて残りのテキストボックスに入力されます。

ここに私のデータベースがあります:

ここに画像の説明を入力

「 SM0001」と入力したときのプログラムのスクリーンショットを次に示します。

ここに画像の説明を入力

「製品コード テキスト ボックス」、「数量テキスト ボックス」、「説明テキスト ボックス」、「小計テキスト ボックス」、および「合計テキスト ボックス」に「 SM0001 」と入力する前に注意してください。空です。

「製品コード テキスト ボックス」に「SM0001」と入力すると、入力したそのコードに属するすべてのデータが表示されます。

注: データベースの価格はプログラムの小計です

ここに私の問題があります:「製品コードテキストボックス」に「 SM0002 」と入力すると(入力したコードはデータベースにありません。データベースに「 SM0001」しかない製品コード)、プログラムが停止します「入力文字列が正しい形式ではありませんでした」というエラーが表示され、ここで指摘されています:

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」です。

4

2 に答える 2

5

あなたの例外がここにある場合

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);
于 2013-10-06T07:08:31.290 に答える
1

変換する前に、null または空のようにチェックしてください

if(!string.IsNullOrEmpty(this.numericTextBox2.Text.ToString()))
{
price = Convert.ToDecimal(this.numericTextBox2.Text);
}else
{
price = 0;//or what you want
}
于 2013-10-06T07:07:03.053 に答える