【问题标题】:VB.net combobox displaying System.Data.DataRowViewVB.net 组合框显示 System.Data.DataRowView
【发布时间】:2015-02-05 01:11:32
【问题描述】:

我正在尝试通过 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 = "[回复ID]

但组合框中的任何项目都返回为 System.Data.DataRowView

有人可以告诉我我的代码是如何/为什么是错误的吗?

【问题讨论】:

    标签: vb.net ms-access-2013


    【解决方案1】:

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

    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 & " "
    

    也就是说,请记住,构建连接字符串的命令文本是数据库编程中最糟糕的事情。您应该学习如何使用参数化查询

    我要更改的另一件事是使用这些带有空格的字段。它们是一种非常嘈杂的干扰,造成的麻烦比他们解决的要多。

    【讨论】:

    • 感谢您的回复,这是我收到的最详细的回复之一。在未来的项目中,空间肯定会从数据库中删除,因为这只是麻烦。再次感谢您抽出宝贵时间回复。
    • 很高兴能提供帮助。看到你是这里的新用户,建议阅读How does accepting an answer work?
    猜你喜欢
    • 2011-09-25
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多