簡體   English   中英

如何根據CB中另一個ComboBox中的選定項目填充ComboBox

[英]How to populate a ComboBox depending on the selected item from another ComboBox in VB

我的MySql數據庫中有表:

  1. 材料
  2. 測量單位

我也有2個組合框:

  1. cmbHeader-此組合框填充數據庫中的表。
  2. cmbContent-此組合框應填充從cmbHeader中選擇的表內的列

我可以使用以下代碼在數據庫中的表中填充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

這是我使用上面的代碼得到的錯誤的圖像。 錯誤1

我嘗試將查詢更改為“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM