我想从下拉列表中显示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
答案 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
无需再次往返数据库。您已经有了所需的数据。