如何获取listbox vb.net的选定值字段

时间:2012-02-09 12:46:53

标签: asp.net vb.net listbox selectedvalue selectedindexchanged

希望你做得好。

我有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。

非常感谢。

2 个答案:

答案 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,但不要以这种方式混合