[英]How to populate a ComboBox depending on the selected item from another ComboBox in VB
我的MySql數據庫中有表:
我也有2個組合框:
我可以使用以下代碼在數據庫中的表中填充cmbHeader:
Dim conn As New MySqlConnection
Dim command As New MySqlCommand
Dim dt As New DataTable
conn.ConnectionString = "server=localhost;userid=root;password=NewPass;database=converter"
Try
conn.Open()
dt = conn.GetSchema("TABLES")
cmbHeader.DataSource = dt
cmbHeader.DisplayMember = "table_name"
cmbHeader.ValueMember = "table_name"
command.Dispose()
conn.Close()
Catch ex As Exception
End Try
現在,對於cmbContent,我的代碼中出現錯誤。 我使用以下代碼:
Private Sub cmbHeader_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbHeader.SelectedIndexChanged, cmbList.SelectedIndexChanged
Dim conn As New MySqlConnection
Dim command As New MySqlCommand
Dim dt As New DataTable
Dim reader As MySqlDataReader
conn.ConnectionString = "server=localhost;userid=root;password=NewPass;database=converter"
conn.Open()
Dim query As String
query = "SELECT * FROM '" & cmbHeader.SelectedItem & "'"
command = New MySqlCommand(query, conn)
reader = command.ExecuteReader
cmbList.Items.Clear()
While reader.Read
Dim header = reader.GetString("Header")
Dim content = reader.GetString("Content")
Dim convert = reader.GetString("Convert")
cmbList.Items.Add(content)
End While
command.Dispose()
reader.Close()
conn.Close()
End Sub
這是我使用上面的代碼得到的錯誤的圖像。
我嘗試將查詢更改為“ SELECT * FROM'”和cmbHeader.SelectedItem.ToString&“'”,但遇到了另一個錯誤。 如何根據我在第一個ComboBox上選擇的內容來填充第二個ComboBox? 請幫助我被卡住。 謝謝。 :)
替換代碼中的以下行,
query = "SELECT * FROM '" & cmbHeader.SelectedItem & "'"
用這條線,
query = "SELECT * FROM " & cmbHeader.SelectedItem.Value & ";"
希望這會起作用。 謝謝。
像這樣進行查詢:
query = "SELECT * FROM " & cmbHeader.Text '<-- updation
OR
query = "SELECT * FROM " & cmbHeader.SelectedValue '<-- updation
但這不是一個好習慣,因為它會導致sql注入,所以我建議您使用參數化( 在這種情況下,可以避免傷害,因為它只允許從組合框中選擇值。)但是通常不是一個好習慣這就是為什么建議像下面這樣的 )查詢
query = "SELECT * FROM ?"
Dim cmd As New OdbcCommand
With cmd
.CommandType = CommandType.Text
.CommandText = query
.Connection = con
.Parameters.Add(New OdbcParameter(@table,cmbHeader.SelectedItem ))
End With
對於其他有相同問題的人
我能夠弄清楚我的代碼出了什么問題。 我得到的組合框的值返回“ Data.Row.DataRowView”,這就是查詢失敗的原因。 我改變了這個:
cmbHeader.DataSource = dt
cmbHeader.DisplayMember = "table_name"
cmbHeader.ValueMember = "table_name"
到這個:
cmbHeader.ValueMember = "table_name"
cmbHeader.DisplayMember = "table_name"
cmbHeader.DataSource = dt
然后在我的SelectedIndexChanged事件中,我使用了以下方法:
Dim value As String = ""
value = Convert.ToString(cmbHeader.Text)
conn.Open()
Dim query As String
query = "SELECT * FROM " & value
command = New MySqlCommand(query, conn)
'With command
' .Parameters.AddWithValue("header", value)
'End With
reader = command.ExecuteReader
cmbList.Items.Clear()
While reader.Read
Dim content = reader.GetString("Content")
cmbList.Items.Add(content)
End While
command.Dispose()
reader.Close()
conn.Close()
希望這可以幫助。 感謝大家的幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.