VB.net组合框显示System.Data.DataRowView

VB.net组合框显示System.Data.DataRowView,vb.net,ms-access-2013,Vb.net,Ms Access 2013,我试图通过Access 2013将SQL查询中的数据返回到我的VB表单中。我的代码如下 Private Sub frm_8_IncidentResponseSelect_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim dt As New DataTable Dim query As String = "select ([response ID] &' '&[response date]

我试图通过Access 2013将SQL查询中的数据返回到我的VB表单中。我的代码如下

Private Sub frm_8_IncidentResponseSelect_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim dt As New DataTable
    Dim query As String = "select ([response ID] &' '&[response date]) As responsedetails from response where [incident id] = " & txt_incidentid.Text & " "
    Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase"
        Using command As New OleDbCommand(query, connection)
            Using adapter As New OleDbDataAdapter(command)
                connection.Open()
                adapter.Fill(dt)
                connection.Close()
              End Using
        End Using
  End Using

    For Each Data As DataRow In dt.Rows
        If dt.Rows.Count > 0 Then
            cb_responseid.DataSource = dt
            cb_responseid.DisplayMember = "[responsedetails]"
            cb_responseid.ValueMember = "[response id]
        End If
    Next
End Sub
然而,首先,我被两个错误击中

VB正在返回以下错误消息

'无法绑定到新的显示成员' 并突出显示以下代码行 cb_responseid.ValueMember=“[response id]

但combox框中的任何项目也将以System.Data.DataRowView的形式返回


有人能告诉我我的代码是如何/为什么出错的吗?

首先,您应该删除表行上的循环,只需将DataTable设置为您的数据源,并删除用于
DisplayMember
ValueMember
属性的字符串周围的方括号

If dt.Rows.Count > 0 Then
    cb_responseid.DataSource = dt
    cb_responseid.DisplayMember = "responsedetails"
    cb_responseid.ValueMember = "responseid"
End If
然后,您需要更改查询以同时返回
[response id]
字段,因为(在将其重命名为不带空格的内容后)。您的代码使用该字段组成一个名为
responsedetails
的新字段,因此它不再作为源字段可见,用于
ValueMember

Dim query As String = "select [response id] as responseid, " & _ 
    " ([response ID] &' '&[response date]) As responsedetails " & _ 
    " from response where [incident id] = " & txt_incidentid.Text & " "
尽管如此,请记住,构建命令文本连接字符串是数据库编程中最糟糕的事情。您应该学习如何使用参数化查询


我要改变的另一件事是使用这些字段,其中包含空格。这些字段非常嘈杂,会分散注意力,造成比它们解决的问题更多的麻烦。

感谢您的回复,这是我收到的最详细的回复之一。谢谢。在未来的项目中,空格肯定会从数据库中删除,因为它不存在但是很麻烦。再次感谢您花时间回复。很高兴能提供帮助。鉴于您是这里的新用户,我建议您阅读