VB.Net - 组合框未显示数据

VB.Net - Combobox Not Showing the Data

Combobox2.text 未显示来自 table 的调用数据。任何帮助将不胜感激!

Public Sub loadproductdata()

    Dim i As Integer

    str = "SELECT * FROM tbl_products INNER JOIN tbl_suppliers ON tbl_products.prod_supplier = tbl_suppliers.supp_ID WHERE prod_ID = '" & frm_ProductList.DataGridView1.SelectedRows(i).Cells(0).Value & "'"

    cmd = New MySqlCommand(str, con)
    con.Open()
    dr = cmd.ExecuteReader()

    If dr.Read() Then

        TextBox1.Text = (dr.Item("prod_code").ToString())
        TextBox2.Text = (dr.Item("prod_name").ToString())
        ComboBox1.Text = (dr.Item("prod_category").ToString())
        Label1.Text = (dr.Item("prod_supplier").ToString())
        ComboBox2.Text = (dr.Item("supp_name").ToString())
        TextBox3.Text = (dr.Item("prod_purchaseprice").ToString())
        TextBox4.Text = (dr.Item("prod_retailprice").ToString())
        TextBox5.Text = (dr.Item("prod_discount").ToString())
        ComboBox3.Text = (dr.Item("prod_unit").ToString())
        TextBox6.Text = (dr.Item("prod_stockqty").ToString())
        TextBox7.Text = (dr.Item("prod_reorderlvl").ToString())
        TextBox8.Text = (dr.Item("prod_description").ToString())
        TextBox9.Text = (dr.Item("prod_remarks").ToString())
   
    End If

    con.Close()

End Sub

当组合框处于 DropDownList 模式时,如您的那样,要将其当前值设置为其列表中的项目,您应该设置 SelectedValue 属性。您还应该考虑用某种可以保持键项和值项之间差异的对象填充控件,以支持不同的显示值与支持值(供应商“Microsoft”的 ID 为“6”)

While dr.Read()
    Dim kvp = new KeyValuePair(Of Integer, String) (0,"")
    kvp.Value= (dr.Item("supp_name").ToString())
    kvp.Key = DirectCast(dr.Item("supp_id"), Integer)

    ComboBox2.Items.Add(kvp)

Loop

Combobox2.DisplayMember = "Value"
Combobox2.ValueMember = "Key"

现在,如果您在其他查询中设置 SelectedValue = 6,组合将显示“Microsoft”

ps;如果您只为此使用数据表,实际上会容易得多:

Dim dt = new DataTable
Dim da as MySqlDataAdapter("SELECT * FROM...", "conn string here")
da.Fill(dt)
'rename your combobox2 to supplierComboBox
supplierComboBox.DataSource = dt
supplierComboBox.DisplayMember = "supp_name"
supplierComboBox.ValueMember = "supp_id"

如果你在任何地方都使用强类型数据集而不是这种强烈的手动提取数据,它会变得更容易 - 但这超出了这个问题的范围