I have a windows form that references two tables with a foreign key constraint issue. This form uses detail views for both tables. The tables are tblContact and tblMembers. The relation is based on the ContactID that is in both tables. The parent is in the tblContact table.
I am using the binding source to do record navigation. Overall this is working well. When I have data in both tables it performs navigation accurately. Modification works if there is existing data in both tables that meet the relationship. The problem that I have is when I try to find if there is an existing record in the tblMembers table. I can't use find. I know that it has to do with accessing the detail table correctly. I am pretty sure that this is done via getting the properties of the table and accessing the PropertyDescriptorCollection.
Either way I am looking to save the data in the tables in a safe way. I am also concerned that I might have concurrency problems with the way that I am getting records.
Here is a code example that I am trying:
Imports System.ComponentModel Public Class frmMember Private Sub TblContactsBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.Validate() Me.TblContactsBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.Ds) End Sub 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") MessageBox.Show("The ContactID is " & contactID.ToString()) newMemberRow = Ds.Tables("tblMember").NewRow() newMemberRow.Item("ContactID") = contactID newMemberRow.Item("Status") = StateTextBox.Text newMemberRow.Item("MemberNotes") = MemberNotesTextBox.Text Try Ds.Tables("tblMember").Rows.Add(newMemberRow) Me.TblMemberBindingSource.EndEdit() Catch ex As Exception MessageBox.Show(ex.Message) End Try Me.TableAdapterManager.UpdateAll(Me.Ds) End Sub Private Sub frmMember_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'TODO: This line of code loads data into the 'Ds.tblMember' table. You can move, or remove it, as needed. Me.TblMemberTableAdapter.Fill(Me.Ds.tblMember) 'TODO: This line of code loads data into the 'Ds.tblContacts' table. You can move, or remove it, as needed. Me.TblContactsTableAdapter.Fill(Me.Ds.tblContacts) End Sub Private Sub BindingNavigatorAddNewItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BindingNavigatorAddNewItem.Click End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim props As PropertyDescriptorCollection = TblMemberBindingSource.CurrencyManager.GetItemProperties() If (TblMemberBindingSource.Find(props["ContactID"], "5") >= 0) Then MessageBox.Show("There were records found") End If End Sub End Class