希望你做得好。
我有一个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和selectededitem属性
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.
我不知道为什么?那么,我该找回学生的价值吗?我需要知道ID,因为名字不能用作PK。
非常感谢。
您在listbox1上设置了值和文本字段,但将数据绑定到listbox2。所以,除非我遗漏了什么,否则这似乎就是问题所在。
列表框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
或者将以上所有ListBoxes更改为ListBox1
,但不要以这种方式混合