Я использую базу данных MySQL, которая подключена к программному обеспечению Visual Studio Community 2017 Community Edition.Я использую форму TabControl
, с таблицами в каждом TabPage
.Когда я добавляю и сохраняю записи в первой форме (т. Е. В форме «Книги»), я бы хотел, чтобы комбинированный список во второй форме (т. Е. В форме «Авторы») обновлялся после добавления новой записи в первой форме.
Родительская форма имеет два текстовых поля: txtBookID
и txtBookName
.Учебник txtBookID
имеет автоинкремент.Дочерняя форма имеет ComboBox
, называемый CboBookID_fkey
.Если я сделаю новую запись в учебнике txtBookName
, я бы хотел, чтобы CboBookID_fkey
автоматически обновлялся с новым SelectedItem
в раскрывающемся списке ComboBox's
.
Однако, когда ясделать обновление в TextBox
на родительском TabPage
, раскрывающийся список CboBookID_fkey
ComboBox
не будет автоматически обновляться с изменениями.Я попытался добавить набор данных заполнения в событие INSERT, но это не сработало.Я создал метод ComboValues
и вызвал его из события load моей формы, но исключений / ошибок не было.: Мой код vb.net показан ниже: -
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Load
Dim MysqlConn As New MySqlConnection
MysqlConn.ConnectionString =
"server=localhost;Port=3306;database=mydatabase;userid=root;password=mypassword;persist security info=True"
daBooks = New MySqlDataAdapter("SELECT * From Books", MysqlConn)
Dim dtBooks As DataTable = New DataTable()
daBooks.MissingSchemaAction = MissingSchemaAction.AddWithKey
'daBooks.Fill(dsBooks, "Books")
daBooks.Fill(dtBooks)
dsBooks.Tables.Add(dtBooks)
cbBooks = New MySqlCommandBuilder(daBooks)
dtBooks.Columns("BookID").AutoIncrement = True
dtBooks.Columns(0).AutoIncrementStep = 1
'Bind the DataTable to the UI via a BindingSource.
BookBindingSource.DataSource = dtBooks
BookBindingNavigator.BindingSource = Me.BookBindingSource
txtBookID.DataBindings.Add("Text", BookBindingSource, "BookID")
txtBookCode.DataBindings.Add("Text", BookBindingSource, "BookCode")
txtBookName.DataBindings.Add("Text", BookBindingSource, "BookName")
Dim dtAuthors As New DataTable
daAuthors = New MySqlDataAdapter("SELECT * FROM Authors", MysqlConn)
daAuthors.MissingSchemaAction = MissingSchemaAction.AddWithKey
' Dim dsAuthors As New DataSet
dtAuthors = New DataTable("Authors")
daAuthors.Fill(dtAuthors)
dsAuthors.Tables.Add(dtAuthors)
daBooks = New MySqlDataAdapter("SELECT * FROM Books", MysqlConn)
dtBooks = New DataTable("Books")
daBooks.Fill(dtBooks)
dsAuthors.Tables.Add(dtBooks)
cbAuthors = New MySqlCommandBuilder(daBooks)
dtAuthors.Columns("AuthorID").AutoIncrement = True
dtBooks.Columns("BookID").AutoIncrement = True
dtAuthors.Columns(0).AutoIncrementSeed = dtBooks.Rows.Cast(Of DataRow).Max(Function(dr As DataRow) CInt(dr.Item(0))) + 1
dtBooks.Columns(0).AutoIncrementStep = 1
dtBooks.Columns(0).AutoIncrementSeed = dtBooks.Rows.Cast(Of DataRow).Max(Function(dr) CInt(dr.Item(0))) + 1
dtBooks.Columns(0).AutoIncrementStep = 1
dsAuthors.Relations.Add(New DataRelation("relation", dsAuthors.Tables("Books").Columns("BookID"), dsAuthors.Tables("Authors").Columns("BookID_fkey")))
BookBindingSource = New BindingSource(dsAuthors, "Books")
CboBookID_fkey.DisplayMember = "BookName"
CboBookID_fkey.ValueMember = "BookID"
CboBookID_fkey.DataSource = BookBindingSource
AuthorBindingSource = New BindingSource(BookBindingSource, "relation")
'bind the Books' foreign key to the combobox's "SelectedValue"
CboBookID_fkey.DataBindings.Add(New Binding("SelectedValue", AuthorBindingSource, "BookID_fkey", True))
'Bind the DataTable to the UI via a BindingSource.
AuthorBindingSource.DataSource = dtAuthors
AuthorBindingNavigator.BindingSource = Me.AuthorBindingSource
txtAuthorID.DataBindings.Add("Text", AuthorBindingSource, "AuthorID")
txtAuthorName.DataBindings.Add("Text", AuthorBindingSource, "AuthorName")
ComboValues()
End Sub
Private Sub BtnBookSave_Click(sender As Object, e As EventArgs) Handles BtnBookSave.Click
InsertBooks()
End Sub
Public Sub InsertBooks()
Dim sql As String = "INSERT INTO Books (`BookID`, `BookCode`,`BookName`) values (@Bookid,@Bookcode,@Bookname)"
con = New MySqlConnection("Server=localhost;Port=3306;Database=mydatabase;userid=root;password=mypassword;persist security info=True")
con.Open()
Dim cmd = New MySqlCommand(sql, con)
cmd.Parameters.AddWithValue("@Bookid", Me.txtBookID.Text)
cmd.Parameters.AddWithValue("@Bookcode", Me.txtBookCode.Text)
cmd.Parameters.AddWithValue("@Bookname", Me.txtBookName.Text)
cmd.ExecuteNonQuery()
con.Close()
End Sub
Private Sub ComboValues()
Dim mycon As New MySqlConnection("Server=localhost;Port=3306;Database=mydatabase;userid=root;password=mypassword;persist security info=True")
mycon.Open()
dtAuthors.Clear()
Dim daAuthors As New MySqlDataAdapter("select BookName,BookID from Books", mycon)
daAuthors.Fill(dtAuthors)
CboBookID_fkey.DataSource = dtAuthors
With CboBookID_fkey
.DisplayMember = "BookName"
.ValueMember = "BookID"
End With
End Sub