0

コンボボックスで選択した項目に従ってテキストボックスに入力しようとしています。問題は、ロード時に次のエラーがスローされ、VisualStudioでnext..nextを押すことです。実際にやりたいことを実行します。

ここに画像の説明を入力してください どうすれば負荷の問題を解決できますか。

フォームロードのコードは

private void UpdateProduct_Load(object sender, EventArgs e)
        {
            DataSet ds = GetAllItems();
            comboBox2.DataSource = ds.Tables[0];
            comboBox2.DisplayMember = "Product Name";
            comboBox2.SelectedIndex = 0;


        }

コンボボックスの選択されたインデックスのコードは

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
           // string selectedText = this.comboBox2.GetItemText(this.comboBox2.SelectedItem);
            DataSet d = GetProductInfo(comboBox2.Text);
            if (d.Tables.Count > 0)
            {
                textBox2.Text = d.Tables[0].Rows[0]["Quantity"].ToString();
                textBox3.Text = d.Tables[0].Rows[0]["Color"].ToString();
                textBox4.Text = d.Tables[0].Rows[0]["Size"].ToString();
                textBox5.Text = d.Tables[0].Rows[0]["Price"].ToString();
            }

        }

フォームが初めて読み込まれるときにのみ問題が発生します。

GetProductInfoコード

  public DataSet GetProductInfo(string product)
        {
            DataSet dataSet = new DataSet();
            OleDbConnection oleConn = new OleDbConnection(connString);

            try
            {
                oleConn.Open();
                string sql = "SELECT [Quantity], [Color], [Size], [Price] FROM [Product] WHERE [Product Name]= '" + product + "'";
                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(sql, oleConn);
                dataAdapter.Fill(dataSet, "Product");
            }
            catch (Exception ex)
            {
                MessageBox.Show("An exception has been occured\n" + ex.ToString());
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                oleConn.Close();
            }
            if (dataSet.Tables["Product"].Rows.Count <= 0)
                return null;

            return dataSet;
        }

スタックトレース

System.NullReferenceException occurred
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=Purchase Management
  StackTrace:
       at Purchase_Management.UpdateProduct.comboBox2_SelectedIndexChanged(Object sender, EventArgs e) in c:\Users\Amrit\Desktop\Purchase Management\Purchase Management\UpdateProduct.cs:line 99
  InnerException: 
4

4 に答える 4

2

SelectedIndexChangedを使用するのではなく、SelectionChangeCommittedイベントを使用します。これにより、コンボボックスを初期化するときではなく、ユーザーが選択したアイテムを変更したときにのみ発生するため、これらすべての問題が回避されます。

于 2013-03-02T15:06:08.767 に答える
0

メソッドがnullを返します。そのため、エラーがスローされます

DataSet dstProduct = new DataSet();
dstProduct = GetProductInfo(comboBox2.Text);

その後、試してみてください

if(dstProduct.Tables.Count>0 && dstProduct.Tables[0].Rows.Count >0)
{
 // then do stuff. 
}
于 2013-03-02T14:28:31.287 に答える
0

.Countの場合に例外を発砲するためd = null

宣言するDataSet d = new DataSet();

于 2013-03-02T14:29:27.453 に答える
0

if (!string.IsNullOrEmpty(productName))ステートメントを追加するだけで大​​丈夫です:

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
    var productName = comboBox2.Text;
    if (!string.IsNullOrEmpty(productName)) {

        DataSet d = GetProductInfo(productName);
        if (d.Tables.Count > 0)
        {
            textBox2.Text = d.Tables[0].Rows[0]["Quantity"].ToString();
            textBox3.Text = d.Tables[0].Rows[0]["Color"].ToString();
            textBox4.Text = d.Tables[0].Rows[0]["Size"].ToString();
            textBox5.Text = d.Tables[0].Rows[0]["Price"].ToString();
        }
    }
}
于 2013-03-02T14:39:14.343 に答える