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

메시지 : 참조 제약 조건 "FK_Order_Details_Orders"와 충돌 DELETE 문.

예,하지만 고객의 모든 주문을 삭제하고 그리드를 클릭하면 -1 행을 얻습니다. 왜?

답변

1

그냥 주문을 삭제하는 것입니다. Orders의 하위 테이블 인 Order Details도 삭제해야합니다.

관련 문제