如何从Dropdownlist选择中显示来自mysql库的数据

时间:2020-10-09 05:11:55

标签: mysql asp.net vb.net

我想从下拉列表中显示mysql数据库。我使用此代码从dropdownlist填充数据,它运行完美。在此代码中,它将在下拉列表中显示产品名称

If Not Me.IsPostBack Then
            Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
            Using con As New MySqlConnection(constr)
                Using cmd As New MySqlCommand("SELECT tbl_productid,tbl_productname FROM tbl_products")
                    cmd.CommandType = CommandType.Text
                    cmd.Connection = con
                    con.Open()
                    cmbProducts.DataSource = cmd.ExecuteReader()
                    cmbProducts.DataTextField = "tbl_productname"
                    cmbProducts.DataValueField = "tbl_productid"
                    cmbProducts.DataBind()
                    con.Close()
                End Using
            End Using
            cmbProducts.Items.Insert(0, New ListItem("Select Product"))
        End If

现在从选定的产品名称开始,我想在文本框中显示其productID。但是这段代码没有输出?我不知道我的代码有什么问题可以帮助我的人

这是代码

 Protected Sub cmbProducts_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cmbProducts.SelectedIndexChanged
        'MsgBox("Hellow World!", MsgBoxStyle.Critical)
        Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
        Dim con As New MySqlConnection(constr)



        con.Open()
        Dim cmd As New MySqlCommand("SELECT tbl_productid from tbl_products where tbl_productname = '" + cmbProducts.Text + "'", con)
        Dim sda As New MySqlDataAdapter(cmd)
        'Dim dr As New MySqlDataReader
        Dim dr As MySqlDataReader
        dr = cmd.ExecuteReader

        If dr.Read Then
            txtProductID.Text = dr.GetValue(0)
        End If

        con.Close()
        con.Dispose()


    End Sub

2 个答案:

答案 0 :(得分:0)

好,几件事。 下拉列表有两列。数据值(id)和数据文本。

你所拥有的看起来不错。

但是,当您获取/抓取/使用下拉列表时,您将拥有:

DropDownList1.Text           - this will return the data value (1st column)
DropDownList1.SelectedValue  - this will ALSO return data value (1st column)
DropDownList1.SelectedItem.Text  - this gets the 2nd display text value (2nd column)

因此,由于很多下拉列表只能是一列,因此.text和.SelectedValue都可以使用。 (换句话说,您可以使用.text,但它会获取第一个值,并且由于很多放置列表可能只包含一个列,因此.text始终会获取该第一个值)。但是我会考虑使用SelectedValue来驱动下拉列表的列。

在您的情况下,您确实需要第二列,因此您想使用:

DropDownList1.SelectedItem.Text

所以

New MySqlCommand("SELECT tbl_productid from tbl_products where tbl_productname = '" 
    + cmbProducts.SelectedItem.Text + "'", con)
  

答案 1 :(得分:0)

我用自己的数据进行了演示。我还在测试程序中使用了给定的控件名称。这不是您想要在应用程序中执行的操作。您的控件名称很好。

我将代码分为数据访问部分和用户界面代码。实际事件过程中几乎没有代码。

您已将.DataValueField设置为ID,以便可以在SelectedIndexChanged事件中检索该值。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        FillDropDownList()
    End If
End Sub

Private Sub FillDropDownList()
    Dim dt = GetListBoxData()
    DropDownList1.DataTextField = "Name"
    DropDownList1.DataValueField = "ID"
    DropDownList1.DataSource = dt
    DropDownList1.DataBind()
End Sub

Private Function GetListBoxData() As DataTable
    Dim dt = New DataTable
    Dim Query = "Select Top 10 ID, Name
                        FROM Coffees;"
    Using cn As New SqlConnection(ConStr),
            cmd As New SqlCommand(Query, cn)
        cn.Open()
        dt.Load(cmd.ExecuteReader)
    End Using
    Return dt
End Function

Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
    TextBox1.Text = DropDownList1.SelectedValue
End Sub

无需再次往返数据库。您已经有了所需的数据。