2011-02-05 22 views
1

グリッドビューで注文をナビゲートするためのコンボボックスを作成しました。関連する子テーブルから行を削除する方法

Dim adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Customers", cstr) 
    Dim adapter2 As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Orders", cstr) 
    adapter.Fill(ds, "Customers") 
    adapter2.Fill(ds, "Orders") 
    ds.Relations.Add("CustOrd", ds.Tables("Customers").Columns("CustomerID"), ds.Tables("Orders").Columns("CustomerID")) 

    bs = New BindingSource(ds, "Customers") 

    ComboBox1.DataSource = bs 
    ComboBox1.DisplayMember = "CompanyName" 
    ComboBox1.ValueMember = "CustomerID" 

    DataGridView1.DataSource = bs 
    DataGridView1.DataMember = "CustOrd" 

今、Ordersテーブルで選択したグリッドの行に削除ボタンを追加します。 しかし、私はこのデータ関係のためにどのように動作すべきかについていくつかの誤解を持っています。

BindingSource.RemoveAt(index)を使用すると、選択したCustomerID全体のすべての行が削除され、実際には変更は保存されません。 私は十分な経験がありません。私のコードの例、Orders dbから行を削除する方法を教えてください。

UPDATE: だから、私は削除のためにこれを作成したが、STIL問題を抱えて:

Dim key As String = DataGridView1.SelectedRows(0).Cells("OrderID").Value.ToString 
    Dim dr As DataRow = ds.Tables("Orders").Rows.Find(key) 
    dr.Delete() 
    adapter2.Update(ds, "Orders") 

エラー:REFERENCE制約 "FK_Order_Details_Orders" と競合DELETE文を。

はい、私はしましたが、顧客のすべての注文を削除し、グリッドをクリックすると-1の行が表示されます。どうして?

答えて

1

ご注文を削除するだけです。 Ordersの子テーブルであるOrder Detailsも削除する必要があります。

関連する問題