I am having a problem trying to save records in a parent / child data relation. I have to tables tblContacts & tblMember. There is a fk relation on the ContactID field. The tblContacts table is the master record. I am using a set up bound windows forms controls to do the data collection. The problem that I am having is in saving the child record. After the form is populated in both the fields and hitting the save button the items in the child record get deleted. It does add a row in the child record but only the ContactID (from the master table) and the key for the tblMember table.
I can see that since the new master record incites the addition of a new row, the data is abandoned. Once there is a save done to the master / child record I can go back and modify the fields and it saves it successfully. I know I must be missing something small. I am not sure how to work around this so that the controls are read into memory and then completed in the new row. I have an example of my code:
Private Sub TblContactsBindingNavigatorSaveItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TblContactsBindingNavigatorSaveItem.Click Dim newMemberRow As DataRow 'To create a new row in the tblMember table Dim contactID As Integer 'To hold the contactID to insert in the new member ContactID field Dim rowsaffected As Integer 'To indicate the number of rows affected by update Dim contactIndex As Integer Me.Validate() Me.TblContactsBindingSource.EndEdit() Me.TblContactsTableAdapter.Update(Ds.tblContacts) ' Me.TblContactsBindingSource.MoveLast() contactIndex = Me.TblContactsBindingSource.Position() MessageBox.Show("The contact Index is " & contactIndex) contactID = Me.Ds.Tables("tblContacts").Rows(contactIndex).Item("ContactID") Me.TblContactsBindingSource.ResetBindings(True) If (Me.TblMemberBindingSource.Find("ContactID", contactID.ToString()) < 0) Then MessageBox.Show("Current Position in table " & TblMemberBindingSource.Position().ToString()) MessageBox.Show("The ContactID is " & contactID.ToString()) ' newMemberRow = Ds.Tables("tblMember").NewRow() ' newMemberRow.Item("ContactID") = contactID ' newMemberRow.Item("Status") = StatusTextBox.Text ' newMemberRow.Item("MemberNotes") = MemberNotesTextBox.Text Try Ds.Tables("tblMember").Rows.Add(newMemberRow) Me.Validate() Me.TblMemberBindingSource.EndEdit() Me.TblMemberTableAdapter.Update(Ds.tblMember) Catch ex As Exception MessageBox.Show(ex.Message) End Try ElseIf (Me.TblMemberBindingSource.Find("ContactID", contactID.ToString()) >= 0) Then TblMemberBindingSource.MoveFirst() Try Me.TblMemberBindingSource.EndEdit() Catch ex As Exception MessageBox.Show(ex.Message) End Try End If 'Me.TableAdapterManager.UpdateAll(Me.Ds) End Sub