【问题标题】:Constructing a string with a value from a ListBox使用 ListBox 中的值构造字符串
【发布时间】:2017-04-10 14:29:12
【问题描述】:

当从列表框中选择项目时,我想填充数据网格视图。

我的代码给了我这个错误:

没有为字符串“SELECT DeptName FROM Department”定义运算符“&”并键入“DataRowView”。

这是我的代码:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    cmd = New OleDbCommand("SELECT DeptName FROM  Departments inner  JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" & ListBox1.SelectedValue & "'", conn)
    Dim daa As New OleDbDataAdapter(cmd)
    Dim dtt As New DataTable
    daa.Fill(dtt)
    dgv.DataSource = dtt
End Sub

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    有几种方法可以查看。

    您可以预先在ListBox1 上设置ValueMember这是一个示例,其中ListBox 的值从1 到10 及其平方。 ValueMember 是 FacID,它只是数字。 DisplayMember 是 FacID 的正方形(用于演示目的!),表明您不需要显示值成员。

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim i As Integer
        Dim table As New DataTable()
        Dim column1 As New DataColumn("FacID")
        Dim column2 As New DataColumn("Square")
        table.Columns.Add(column1)
        table.Columns.Add(column2)
        For i = 0 To 9
            Dim row As DataRow = table.NewRow()
            row("FacID") = i
            row("Square") = i ^ 2
            table.Rows.Add(row)
        Next i
        Dim view As New DataView(table)
        ListBox1.DataSource = view
        ' set the DisplayMember and ValueMember
        ListBox1.DisplayMember = "Square"
        ListBox1.ValueMember = "FacID"
    End Sub
    
    Private Sub ListBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ListBox1.Click
        Dim message = "Selected value: " & ListBox1.SelectedValue.ToString()
        MessageBox.Show(message)
    End Sub
    

    这就是 ListBox 在运行时的样子

    当它被点击时,显示所选值的消息

    如果这是在运行您提供的代码之前完成的,那么您几乎可以按原样使用您的代码,因为现在ListBox1.ValueMember 是一个整数。请注意,您应该更严格并将整数转换为字符串以准备查询。

    Dim query =
        "SELECT DeptName FROM Departments " &
        "inner JOIN Faculties ON Faculties.ID = Departments.FacID " &
        "where FacID = '" & ListBox1.SelectedValue.ToString() & "'"
    

    您也可以设置ValueMember。如果未指定ValueMember,则SelectedValue 默认为DataSource 中的类型,即DataView,并且出于所有意图和目的,DataRowView 中的IList

    没有 DisplayMember,ListBox 看起来像这样

    我想它不是这样的。因此,只需事先设置 ValueMember 即可。

    【讨论】:

      【解决方案2】:

      ListBox1.SelectedValueDataRowView,因此您不能将其添加到字符串中。你可能会想要这样的东西:

      "SELECT DeptName FROM  Departments inner  JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" _
           & ListBox1.SelectedValue["yourColumn"].ToString() & "'"
      

      或者

      "SELECT DeptName FROM  Departments inner  JOIN Faculties ON Faculties.ID = Departments.FacID where FacID='" _
           & ListBox1.SelectedValue[columnIndex].ToString() & "'"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-26
        • 2013-05-05
        • 1970-01-01
        • 2018-08-17
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多