0

うまくいくことを願っています。

主キーを割り当てたいリストボックスとテキスト(学生テーブルなど)があります。だから私はこのコードを書きました。

    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の値を取り戻すのですか?IDcoz名がPKとして使用できないことを知っておく必要があります。

本当にありがとう。

4

2 に答える 2

3

listbox1に値フィールドとテキストフィールドを設定しますが、データをlistbox2にバインドしています。ですから、何か他のものが欠けていない限り、それが問題になる可能性があるようです。

listbox1はどこに埋められ/バインドされていますか?

于 2012-02-09T13:13:30.880 に答える
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()

もう1つは、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このように混合しないでください

于 2012-02-09T13:28:48.027 に答える