2011-02-05 73 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" 

現在我想爲訂單表中的網格選定行添加刪除按鈕。 但是我對這個數據關係應該如何工作有些誤解。

如果我使用BindingSource.RemoveAt(index),它將刪除整個選定CustomerID的所有行,並且不會實際保存更改。 我沒有足夠的經驗,你能給我一個例子,我的代碼,如何從Orders數據庫中刪除行。

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") 

錯誤:DELETE語句衝突與基準約束 「FK_Order_Details_Orders」。

是的,我做了,但是當我刪除客戶的所有訂單,然後點擊一個網格,我就得到-1行。爲什麼?

回答

1

您只是刪除了訂單。您還需要刪除訂單明細,這是訂單的子表。