как получить выбранное значение поля listbox vb.net - PullRequest
0 голосов
/ 09 февраля 2012

Надеюсь, у вас все хорошо.

У меня есть 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 работает нормально.И я хочу поймать свойства selectedvalue и selecteditem в ListBox1_SelectedIndexChanged

    1. Dim selectedPupil As String = ListBox1.SelectedItem.ToString()
    2. Dim selectedPupilID As Integer = ListBox1.SelectedValue

Когда я выбираю что-то в списке, свойства selecteditem и selectedvalue просто возвращают имя студента, а не идентификатор студента.Итак, я получаю эту ошибку.

    Error on Line2. Conversion from string "RichardCole" to type 'Integer' is not valid.

Не знаю почему?Так я получу обратно значение студента?Мне нужно знать, что имя coz нельзя использовать в качестве PK, поэтому

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Вы устанавливаете значение и текстовые поля в listbox1, но привязываете данные к listbox2. Так что, если я не пропускаю что-то еще, кажется, что это может быть проблемой.

Где находится список1 заполненный / связанный?

1 голос
/ 09 февраля 2012
  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, но не смешивайте их таким образом

...