Member 13890537 Ответов: 1

Combobox не будет обновляться должным образом, как это исправить? Vb.net


Я добавляю данные в свой combobox, но иногда отображаемые данные не отображаются(или обновляются для отображения в моем combobox). Я должен добавить еще одни данные для отображения предыдущих введенных данных. Как я могу полностью обновить это?

Что я уже пробовал:

Private Sub BtnBlood_Click(sender As Object, e As EventArgs) Handles BtnBlood.Click
       If ComboBlood.Text = "" Then
           MsgBox("Please Input a Value first")
           Exit Sub
       End If
       Try
           Bloodforbtn()
       Catch ex As Exception
           MsgBox(ex.ToString)
       End Try
   End Sub
   Private Sub Bloodforbtn()

       If MessageBox.Show("Are you sure you want to add this?" & vbNewLine & "[Blood Type]:  " & ComboBlood.Text, "Saving data", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
           Dim connString As New OleDbConnection("Provider= Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB_HR.accdb;Jet OLEDB:DATABASE PASSWORD=dbhr123;")
           connString.Open()

           Dim da As New OleDbDataAdapter()
           Dim dt As New DataTable()

           Dim str As String
           str = "Insert Into tblBloodtype([Bloodtype]) Values (?)"
           Dim cmd As New OleDbCommand(str, connString)

           cmd.Parameters.Add(New OleDbParameter("Bloodtype", CType(ComboBlood.Text, String)))

           cmd.ExecuteNonQuery()
           cmd.Dispose()

           MessageBox.Show(ComboBlood.Text + " was added")
           'ComboBlood.Text = ""
           'DISPLAY THE DATA
           da.SelectCommand = New OleDbCommand("Select * from tblBloodtype", myConnection)
           da.Fill(dt)
           ComboBlood.DataSource = dt
           ComboBlood.DisplayMember = "Bloodtype"
           connString.Close()

       Else
           Exit Sub
       End If
       ComboBlood.Text = ""
   End Sub

1 Ответов

Рейтинг:
1

CHill60

Есть пара вещей, которые нужно попробовать

- попробуйте очистить элементы перед переназначением источника данных (я, кажется, помню, что делал что-то вроде ComboBlood.DataSource = Nothing

- Или попробуйте сбросить привязки данных Контроль.Метод ResetBindings (System.Окна.Формы)[^]

ComboBlood.DataSource = dt
ComboBlood.DisplayMember = "Bloodtype"
ComboBlood.ResetBindings()


Member 13890537

Привет @Mr. CHill60 я попробовал решение, которое вы дали. Все еще не работает

Тусклый str как струна
str = "вставить в tblBloodtype([Bloodtype]) значения (?)"
Dim cmd как новая OleDbCommand(str, connString)

cmd.параметры.Добавить(Новый OleDbParameter("Bloodtype", CType(ComboBlood.текстовая строка)))

УМК.Метод executenonquery()
УМК.Располагать()

'ComboBlood.DataSource = Nothing 'тоже не работает

Ящик для сообщений.Шоу(ComboBlood.Текст + " был добавлен")

- ПОКАЖИТЕ ДАННЫЕ
da.SelectCommand = New OleDbCommand("Select * from tblBloodtype", myConnection)
ComboBlood.DataSource = Nothing ' здесь не работает

да.Заполнить(ДТ)
'ComboBlood.DataSource = Nothing 'здесь тоже не работает
ComboBlood.Источник данных = dt
ComboBlood.DisplayMember = "Группа Крови"
ComboBlood.ResetBindings() 'тоже не работает
Коннор.Закрывать()

CHill60

Попробуйте использовать

dim r as Integer = cmd.ExecuteNonQuery()
и проверьте значение r, прежде чем сказать, что все "завершено". Я бы тоже не стал использовать cmd.Dispose() - просто прокомментируй это пока. Это лучше использовать
Using connString As New OleDbConnection("Provider= Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\DB_HR.accdb;Jet OLEDB:DATABASE PASSWORD=dbhr123;")
...
End Using

Member 13890537

Здравствуйте Мистер Чилл60 Добрый День
Проблема уже была решена в моем коде
da.SelectCommand = New OleDbCommand("Select * from tblBloodtype", myConnection)
Я просто меняю myConnection на connString тот, который я использую для открытия и закрытия своей базы данных.

Я просто понимаю, не используя ComboBlood.Источник Данных = Ничто И ComboBlood.ResetBindings() данные, которые я ввожу в свой combobox, отображаются правильно. Мне все еще нужно положить их обратно?
И
Г-н почему следует избегать использования cmd.Утилизировать()?
Заранее благодарю Вас мистер

Я желаю вам хорошего дня и хорошего здоровья.

Кстати, значение r = 1, и я следовал тому, что вы сказали :)

Частная Суб Bloodtesting1()
Дим да как новый OleDbDataAdapter()
Дим ДТ в качестве нового объекта DataTable()

Если MessageBox.Show("вы уверены, что хотите добавить это?" & vbNewLine & "[группа крови]: "& ComboBlood.Текст, "сохранение данных", кнопки MessageBoxButtons.Да, MessageBoxIcon.Question) = Windows.Формы.свойство DialogResult.Тогда Да

Используя connString как новый объект oledbconnection("поставщик= Майкрософт.Туз.Oledb для.12.0;Источник данных=|параметр datadirectory|\DB_HR.# то#; для Jet oledb для:пароль базы данных=dbhr123;")
Коннор.Открыть()
Тусклый str как струна
str = "вставить в tblBloodtype([Bloodtype]) значения (?)"
Dim cmd как новая OleDbCommand(str, connString)

cmd.параметры.Добавить(Новый OleDbParameter("Bloodtype", CType(ComboBlood.текстовая строка)))
Dim r как целое число = cmd.Метод executenonquery()
-командир.Метод executenonquery()
Ящик для сообщений.Show(CType(r, String))

-Ящик для сообщений.Шоу(ComboBlood.Текст + " был добавлен")
- Покажите Данные
da.SelectCommand = New OleDbCommand("Select *from tblBloodtype", connString)
да.Заполнить(ДТ)
ComboBlood.Источник данных = dt
ComboBlood.DisplayMember = "Группа Крови"

Коннор.Закрывать()
Конец Использования
Еще
Выход Из Субмарины
Конец, Если
ComboBlood.Текст = ""
Конец Подводной Лодки

CHill60

Если это сработает, не беспокойтесь о том, чтобы положить эти вещи обратно. Использование правильной строки подключения определенно сделает свое дело. С помощью Using...End Using блок-это хорошая практика, поскольку вы позволяете фреймворку заботиться об утилизации за вас.

Member 13890537

Доброе утро мистер чилл Спасибо за вашу помощь
Теперь я изменю все cmd.Dispose() код, который я использую для использования...Конец использования блока.

Хорошего вам дня и здорового дня мистер