如何从相关的子表中删除行

时间:2011-02-05 14:36:37

标签: .net vb.net data-binding datagridview

我创建了一个用于在网格视图中导航订单的组合框。

    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中删除行。

更新: 所以,我创建了这个删除,但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语句与REFERENCE约束“FK_Order_Details_Orders”冲突。

是的我做了,但当我删除所有客户订单并点击网格时,我得到-1排。为什么呢?

1 个答案:

答案 0 :(得分:1)

您只是删除了订单。您还需要删除订单明细,这是订单的子表。