【问题标题】:how to get the selected value field of listbox vb.net如何获取列表框vb.net的选定值字段
【发布时间】:2012-02-09 12:46:52
【问题描述】:

希望你过得好。

我有一个列表框,我想分配主键和一个文本(例如学生表)。所以我写了这段代码。

    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 因为名称不能用作 PK 所以。

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    您在 listbox1 上设置了值和文本字段,但您将数据绑定到 listbox2。所以,除非我遗漏了其他东西,否则这似乎是问题所在。

    listbox1 在哪里填充/绑定?

    【讨论】:

    • ohh .. 抱歉,这只是我发布此帖子时粘贴错误的副本。
    • 我认为您在此处直接显示的内容没有任何问题。查找对 listbox1 的其他引用并确保没有其他任何东西改变数据绑定,您也可以摆脱 selectedItem 的 text 属性上的 .toString ,因为它已经是一个字符串。
    • 哦,请确保加载列表框的代码不会在每次回发时发生。我看不出这将如何为您提供名称而不是空字符串,但最好确定
    • 我把它修好了,但我不知道我是怎么修的。我刚刚做了一个新项目,并以同样的方式重做所有事情,但它已修复。谢谢。
    • 很高兴你把它整理好了。是的,很神秘。
    【解决方案2】:
      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,但是不要这样混用

    【讨论】:

    • Listbox1 和 2 只是输入错误,您似乎也输入了 Text.ToString() ?这会有所作为吗,因为问题是 ID 而不是学生名。
    • 当然 selectedItem.Text 会有所不同,因为这是一个字符串,而 selectedItem 是一个在编译器尝试解析时可能会引发错误的对象
    • 这没什么区别。我更新了我得到的错误。你还想帮忙吗?
    • 我把它修好了,但我不知道我是怎么修的。我刚刚做了一个新项目,并以同样的方式重做所有事情,但它已修复。谢谢。
    • 问题是你将 ListBox1.SelectedValue (它是字符串类型)分配给一个整数变量。因此,您可以将其解析为整数,请参阅我的答案的更新。现在事实上,你解决了它,但为了提供信息,我试图解释。请参阅上面我的答案的更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 2013-07-15
    • 1970-01-01
    • 2017-01-07
    • 2013-10-21
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多