2016-09-15 6 views
0

必要な情報:Visual StudioおよびC#でWindowsフォームを使用しています。ComboBoxインデックスが変更されました

私は5つのコモボボックスを持っています。これは、SQLでデータベースに用意されている部品で構成されています。コーディングの一環として、DataTableを使用し、そのDataTableにcomboBoxのDataSourceを設定します。

私のSQLクエリでこの同じDataTableに、私はリストの部品のコストを記載しました。私がしたいのは、ドロップダウンリストから選択した部分だけです。関連する価格は、その横のテキストボックスに表示する必要があります。

私はこのためにcomboBox1_SelectedIndexChangedを使用しようとしていますが、私はに実行し、問題が、すぐにフォームの初期ロード、それは屈折率変化としてピックアップしcomboBox1_SelectedIndexChangedがしたいと考えていますしながら、DataSourceDataTableに設定されますようです走るしかし、現時点では、SelectedIndexの値はnullです。まだロードされているため、例外キャストエラーが発生しています。

どうすれば対処できますか?

DataTable SparePart = new DataTable()は、 "public"として利用できるように関数の外で宣言され、comboBox1_SelectedIndexChangedがアクセスできるようになりました。

その後、私はcomboBoxを移入するには、このコードを持っている:

   //Read Status info from DB 
      SqlDataAdapter SparePartReader = new SqlDataAdapter(SQLSparePartDropbox); 
      SparePartReader.Fill(SparePart); 


      comboBoxFinJCSpares1.DataSource = SparePart; 
      comboBoxFinJCSpares1.DisplayMember = "DisplayMember"; 
      comboBoxFinJCSpares1.ValueMember = "PartID"; 

       //Set Combox1 affiliated Cost value to cost textbox 
      int ComBo1PartID = (int)comboBoxFinJCSpares1.SelectedValue; 
      string CostPrice = (from DataRow dr in SparePart.Rows 
           where (int)dr["PartID"] == ComBo1PartID 
           select (string)dr["PartCost"]).FirstOrDefault(); 
      textBoxFinJCCost1.Text = CostPrice.ToString(); 

をしてから、私はcomboBoxFinJCSpares1_SelectedIndexChangedのためにこれを持っている:

  //Set Combox1 affiliated Cost value to cost textbox 
     int ComBo1PartID = (int)comboBoxFinJCSpares1.SelectedValue; 
     string CostPrice = (from DataRow dr in SparePart.Rows 
          where (int)dr["PartID"] == ComBo1PartID 
          select (string)dr["PartCost"]).FirstOrDefault(); 
     textBoxFinJCCost1.Text = CostPrice.ToString(); 

enter image description here

+0

if(comboBoxFinJCSpares1.SelectedValue == null)を返します。内部comboBoxFinJCSpares1_SelectedIndexChanged? – Martheen

+0

SelectedChangeCommittedを使用すると役に立ちますか?https://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.selectionchangecommitted(v=vs.110).aspx –

+0

ありがとうございますオプション。 – ExpressDude

答えて

0

ソリューションは、1を作るのと同じくらい簡単ですboolean変数を呼び出してformLoadedを呼び出します。

falseに設定し、フォームがロードされた後にtrueに設定します。

if文の内部コンボボックスを移入するためのコードを入れて、それはそれを

乾杯〜ChenChi

デモ実行する必要があります。

 //Read Status info from DB 
     if(formLoaded) 
     { 
      SqlDataAdapter SparePartReader = new SqlDataAdapter(SQLSparePartDropbox); 
      SparePartReader.Fill(SparePart); 


      comboBoxFinJCSpares1.DataSource = SparePart; 
      comboBoxFinJCSpares1.DisplayMember = "DisplayMember"; 
      comboBoxFinJCSpares1.ValueMember = "PartID"; 

      //Set Combox1 affiliated Cost value to cost textbox 
      int ComBo1PartID = (int)comboBoxFinJCSpares1.SelectedValue; 
      string CostPrice = (from DataRow dr in SparePart.Rows 
          where (int)dr["PartID"] == ComBo1PartID 
          select (string)dr["PartCost"]).FirstOrDefault(); 
      textBoxFinJCCost1.Text = CostPrice.ToString(); 
     } 
+0

ありがとう、非常に良いと簡単なオプション。コメントに記載されている2つのものを試してみて、どちらに最適なのか見てみましょう。あなたたちに知らせるでしょう。 – ExpressDude

0

マルセル・フックストラによって提案されたみんなありがとう、「SelectedChangeCommitted」オプションを私の問題を解決しました。

関連する問題