Обновление элемента управления в другой форме с результатами диалогового окна - PullRequest
0 голосов
/ 29 февраля 2012

Я сделал форму окна, которая содержит список (названный VenueList).Список извлекает свои значения из списка, предоставленного источником привязки VenuesBindingSource, который извлекает идентификатор для значения и имя для текста.

Существует кнопка, вызывающая появление DialogBoxкоторый запрашивает значения для хранения в базе данных для нового места.После того, как значения заполнены и вставлена ​​база данных, должно произойти следующее: диалоговое окно закрывается и возвращается к исходной форме, которая его вызвала.

Однако вместо обновления списка.Список остается прежним.Но если вы закроете форму и снова откроете ее, вы увидите, что было добавлено новое значение.

    TournamentSettings.VenuesTableAdapter.InsertVenueQuery(Trim(VenueNameTxt.Text), Trim(VenueAddress1Txt.Text), Trim(VenueAddress2Txt.Text), Trim(VenueCityTxt.Text), Trim(VenueProvinceTxt.Text), Trim(VenueZipTxt.Text), Trim(CountryBox.SelectedValue), Trim(VenuePhoneNo.Text), VenueType.SelectedText, VenueWebAddress)
    TournamentSettings.VenuesTableAdapter.Fill(TournamentSettings.VenueNameList.Venues)
  • В приведенном выше коде InsertVenueQuery - это имя запроса от дизайнера, которыйвызывается для добавления значений в табличный адаптер VenuesTableAdapter, который используется для заполнения поля со списком при загрузке.Я также отправил команду Fill, чтобы заполнить таблицу новым значением.

Поэтому вопрос заключается в том, стоит ли мне делать это иначе, чем кормить адаптер таблицы и отправлять заполнениеКомандовать на DataTable?Или я что-то здесь не делаю, и я должен внести это значение в список.У меня возникает соблазн переделать все, что находится за пределами конструктора, но это много кода, так как мне нужно по существу запустить две команды (одну для вставки данных, а другую для получения значения @@ IDENTITY, так как он запускается в базе данных доступа.)

1 Ответ

0 голосов
/ 29 февраля 2012

Хорошо.Об этом я должен был подумать на мгновение.

Вместо того, чтобы создавать блок «Готово» для события загрузки, я вместо этого создал подфункцию «FillVenueList».

Я использовалследующий блок кода:

Public Sub FillVenueList()
    ' Adding values from database to a datatable.
    ' From there will add to the list box. 
    Dim VenueConnection As New OleDb.OleDbConnection(DBconnection)
    VenueConnection.Open()
    Dim VenueConnectionQuery As New OleDb.OleDbCommand("SELECT VenueID, VenueName FROM Venues", VenueConnection)
    Dim VenueDataAdapter As New OleDb.OleDbDataAdapter(VenueConnectionQuery)
    Dim VenueDataSet As New DataSet
    VenueDataAdapter.Fill(VenueDataSet, "Venues")

    TrnVenueLst.DataSource = VenueDataSet.Tables("Venues")
    TrnVenueLst.DisplayMember = "VenueName"
    TrnVenueLst.ValueMember = "VenueID"
    VenueConnection.Close()
End Sub

Оттуда я вызвал ЭТО sub на форме И окне Add Venue, и я могу смело видеть, что это работает.ТАК, ЧТО ТАКОЕ вы получаете новое значение в форме, не используйте его как часть события загрузки, а скорее вызовите его из блока события загрузки, а затем вызовите его, когда хотите добавить в список.

...