希望你做得好。
我有Listbox,我想分配主键和文本(例如学生表)。所以我写了这段代码。
mySQLCmd.CommandText = "SELECT studentname, studentid FROM studentstable WHERE Year(DOB) = " + selectedYear
Dim dt As New DataTable
myReader = myCmd.ExecuteReader()
dt.Load(myReader)
Listbox1.datavaluefield = "studentid"
Listbox1.datatextfield = "studentname"
ListBox1.DataSource = dt
ListBox1.DataBind()
列表框工作正常。 SQL语句工作正常。我想在ListBox1_SelectedIndexChanged
上捕获selectedvalue和selecteditem属性 1. Dim selectedPupil As String = ListBox1.SelectedItem.ToString()
2. Dim selectedPupilID As Integer = ListBox1.SelectedValue
当我在列表框中选择某些内容时,selecteditem和selectedvalue属性都只返回学生姓名,而不是学生ID。所以我得到了这个错误。
Error on Line2. Conversion from string "RichardCole" to type 'Integer' is not valid.
我不知道为什么?所以我得到了studentid值?我需要知道ID coz名称不能用作PK。
非常感谢。
答案 0 :(得分:3)
您可以在listbox1上设置值和文本字段,但是您要将数据绑定到listbox2。所以,除非我遗漏了其他东西,否则这似乎可能是问题所在。
listbox1填充/绑定在哪里?
答案 1 :(得分:1)
mySQLCmd.CommandText = "SELECT studentname, studentid FROM studentstable WHERE Year(DOB) = " + selectedYear
Dim dt As New DataTable
myReader = myCmd.ExecuteReader()
dt.Load(myReader)
Listbox2.DataValueField = "studentid" 'it was ListBox1 now ListBox2
Listbox2.DataTextField = "studentname" 'it was ListBox1 now ListBox2
ListBox2.DataSource = dt
ListBox2.DataBind()
另一件事是使用ListBox2而不是一个
的更新强>:
Dim selectedPupil As String = ListBox2.SelectedItem.Text.ToString()
Dim selectedPupilID As Integer = Ctype(ListBox2.SelectedValue, Integer) 'convert the value to integer
或使变量成为字符串
Dim selectedPupilID As String = ListBox2.SelectedValue
或者将上述所有列表框更改为ListBox1
,但不要以这种方式混合