Обновите комбинированный список на родительской странице управления вкладками после создания записи на дочерней странице управления вкладками - PullRequest
0 голосов
/ 02 апреля 2019

Я использую базу данных 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
...