2016-04-29 10 views
0

同じdatagridview内の追加されたコンボボックス列の選択に応じて、datagridview列のセルの値を変更しようとしています。C#グリッドビューのコンボボックスに従ってグリッドビューの列データを変更しますか?

私はあらゆる種類のBindingSourcesでtwikedしていますが、何もそれを正しく理解できないようです。

私が使用しているコードは次のとおりです。

conn = new SqlConnection(DBConnectionString); 
      select_order = new SqlCommand("SELECT orderNum, orderBy, orderShipadrs, orderDate FROM tblOrders WHERE orderNum=" + OrderID, conn); 
      da1 = new SqlDataAdapter(select_order); 
      select_lines = new SqlCommand("SELECT linenum, fkprdctnum, lineQuantity, lineprdctPrice FROM tblOrderLines WHERE fkOrdernum=" + OrderID, conn); 
      da2 = new SqlDataAdapter(select_lines); 
      da2.MissingSchemaAction = MissingSchemaAction.AddWithKey; 
      select_products = new SqlCommand("SELECT * FROM tblProducts", conn); 
      da3 = new SqlDataAdapter(select_products); 
      Orders = new DataSet(); 
      try 
      { 
       da1.Fill(Orders, Order); 
       da2.Fill(Orders, Lines); 
       da3.Fill(Orders, Products); 
      } 
      catch 
      { 
       MessageBox.Show("There was an error connecting to the database."); 
      } 

      DataRelation prdctprice = new DataRelation(Relations, Orders.Tables[Products].Columns["prdctNum"], Orders.Tables[Lines].Columns["fkPrdctnum"]); 
      Orders.Relations.Add(prdctprice); 

      CurrentOrder.DataSource = Orders.Tables[Order]; 
      CurrentOrder.Columns["orderNum"].HeaderText = "Number"; 
      CurrentOrder.Columns["orderNum"].Width = 50; 
      CurrentOrder.Columns["orderBy"].HeaderText = "Customer Name"; 
      CurrentOrder.Columns["orderBy"].Width = 150; 
      CurrentOrder.Columns["orderShipadrs"].HeaderText = "Shipping Address"; 
      CurrentOrder.Columns["orderShipadrs"].Width = 200; 
      CurrentOrder.Columns["orderDate"].HeaderText = "Order Date"; 
      CurrentOrder.Columns["orderDate"].Width = 100; 

      //masterBindingSource.DataSource = Orders; 
      //masterBindingSource.DataMember = Products; 

      CurrentLine.DataSource = Orders.Tables["Lines"]; 

      DataGridViewComboBoxColumn prod = new DataGridViewComboBoxColumn(); 
      prod.DataSource = Orders.Tables[Products]; 
      prod.DisplayMember = "prdctName"; 
      prod.ValueMember = "prdctNum"; 
      prod.HeaderText = "Product"; 
      CurrentLine.Columns.Add(prod); 

      //detailBindingSource.DataSource = masterBindingSource; 
      //detailBindingSource.DataMember = Relations; 

      CurrentLine.Columns["fkPrdctnum"].Visible = false; 
      CurrentLine.Columns["linenum"].Width = 60; 
      CurrentLine.Columns["linenum"].HeaderText = "Number"; 
      CurrentLine.Columns["linenum"].ReadOnly = true; 
      CurrentLine.Columns["lineQuantity"].HeaderText = "Quantity"; 
      CurrentLine.Columns["lineQuantity"].Width = 70; 
      CurrentLine.Columns["linePrdctPrice"].HeaderText = "Price"; 
      CurrentLine.Columns["linePrdctPrice"].ReadOnly = true; 

あなたは簡単にそれを作るために、視覚を持っているだけので: 私は「価格」列のセルが "での選択に応じて、変更したいです製品 "コンボボックス。 コンボボックスはデータセット内のデータセットを「製品」とし、残りのデータグリッドは「ライン」というテーブルからデータを取得しています。

質問は「価格」列を削除し、コンボボックスで変更される別の列を手動で追加するという私の唯一の選択肢ですか?そうでない場合は、他にどのようなオプションがありますか?

Windows Form Window

+0

__「DataGridView」の「GridView」または「DataGrid」をコールしないでください!これらは異なるコントロールであるため、間違って混乱します。常に__right__の名前で物事を呼び出す! DGVがデータバインドされている場合は、CellではなくDataSourceを変更する必要があります。 – TaW

+0

私はそれを試みましたが、DataSourceを変更すると、それはすべての列に対して変更され、1つの列を変更するだけです。 他の列を手動で追加する以外はこれを行う方法はありませんか? –

答えて

1

私は前のデータグリッドにコンボボックスを使用していないが、あなたはそれを行うことができれば、あなたがコンボボックス率の変化にイベントハンドラを持つことができるかどうかを確認するためには良い考えかもしれませんそれを使用して、変更するたびにデータグリッドを更新します。それが不可能な場合は、別のコンボボックスとして実行し、フォームがロードされたときに商品を取り込み、製品を選択するたびにグリッドビューを更新して価格と数量を表示します。また、視覚的な基準から個人的に私は最初に製品名を持っていますが、それは私の人の好みです。これが助けてくれたらと思っています。

+0

私はコンボボックスの変更をキャッチすることはできますが、これまでのところ価格カラムはコンボボックスには全く接続されていないため、何もしません。 Priceカラムをコンボボックスカラムにバインドする方法が見つからない場合、コンボボックスを変更しても何も変わりません。 –

+0

変更をキャッチすると、製品に基づいて価格を設定するクエリを実行できるはずです。変更すると、新しい値を持つようにdatagridviewを再レンダリングできます。なぜなら、コンボボックスの変更をキャッチすることができるとすれば、その変更を簡単に行うことができるからです。私はそれが唯一の方法だと言うことができるから – Brendon

関連する問題