我可以在文本框中查看数据,但问题是,如果我将其更改为下拉以显示多个数据,则会提供空数据。
Private Sub textbox2_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.KeyPress
Try
cmd = New Odbc.OdbcCommand("SELECT maker FROM pcba_info.tblvendorpartnumber WHERE partnumber ='" & Trim(TextBox2.Text.TrimEnd()) & "'", con)
dr = cmd.ExecuteReader
If dr.Read Then
TextBox55.Text = dr("maker").ToString ----------> return single data
TextBox12.SelectedIndex = dr("maker").ToString -----------> no data
dgvcertifiedoperator.DataSource = dt
dgvcertifiedoperator.Update()
dgvcertifiedoperator.Refresh()
End If
Catch ex As Exception
Debug.WriteLine("Plz check the parts" & ex.Message)
End Try
End Sub
答案 0 :(得分:0)
我假设您的TextBox12
代表下拉列表。在这种情况下,将SelectedIndex
分配给字符串是不正确的(只需考虑它一秒钟 - 索引不能是字符串,即AAA
不是索引)。使用Option Strict On
来防止此类错误。
默认情况下,VB.NET不会阻止你这样做,因为理论上一个字符串可以是一个整数,所以这个语句可以工作。但这并不意味着它会在100%的时间内发挥作用。 Option Strict
验证类型转换以确保它始终有效,或者您的代码无法编译。
回到你的问题,一种方法是在列表中累积值,然后将该列表作为下拉列表的数据源,如下所示:
Dim lst As New List(Of String)
While dr.Read Then
lst.Add(dr("maker").ToString)
End While
TextBox12.DataSource = lst
然后,您可以使用TextBox12.SelectedItem
检索当前值,强制转换为字符串:
DirectCast(TextBox12.SelectedItem, String)
附注 - 确保您的控件相应命名。 TextBox通常是为文本框保留的。下拉菜单通常是MakerComboBox
,MakerDropDown
等。避免命名控件如TextBox56
和ComboBox188
,因为这些数字对于其他开发者来说毫无意义。即使您是该项目中唯一的人,也请考虑我们帮助您。