【问题标题】:The multi-part identifier “System.Data.DataRowView” could not be bound."无法绑定多部分标识符“System.Data.DataRowView”。”
【发布时间】:2013-06-26 12:10:23
【问题描述】:

我正在使用 sql server 作为后端和 vb 作为前端来制作一个小型数据库,我几乎已经成功了,但是我偶然发现了这个错误:

“System.Data.SqlClient.SqlException”类型的未处理异常 发生在 System.Data.dll

附加信息:多部分标识符 无法绑定“System.Data.DataRowView”。

这是我的代码:

Imports System.Data.SqlClient
Public Class searchDialog

    Private Sub searchDialog_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'TODO: This line of code loads data into the 'SearchDataSet.Books' table. 
        'You can move, or remove it, as needed.
        Me.BooksTableAdapter.Fill(Me.SearchDataSet.Books)
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ds As New DataSet
        Dim query As String = "select * from Books where " + colNames.SelectedValue.ToString + " LIKE " + "'%" + colValues.Text + "%'"
        BooksTableAdapter.Connection.Open()
        Dim adp As New SqlDataAdapter(query, BooksTableAdapter.Connection.ConnectionString)
        adp.Fill(ds, "Books")
        BooksTableAdapter.Connection.Close()
        filteredRecords.DataSource = ds
        filteredRecords.DataMember = "Books"
    End Sub
End Class

【问题讨论】:

  • 什么是 colNames 和 colValues?
  • 如果您使用的是 Visual Studio,请在设置查询的行上设置一个断点。然后下一步调试 (f8)。变量“查询”中有什么?看起来您的组合框 (colNames) 没有设置 value 属性,或者它被设置为数据行。
  • 在您的加载方法中,您可能希望将 Me.BooksTableAdapter.Fill 放入 !IsPostBack...

标签: sql-server vb.net winforms data-binding


【解决方案1】:

问题就在这里:

Dim query As String = "select * from Books where " + colNames.SelectedValue.ToString + " LIKE " + "'%" + colValues.Text +  "%'" 

我猜colNames 是一个绑定到DataTableDataview 的控件,因此 selectedValue 是DataRowView

这与这篇文章listbox selected item give me " System.Data.DataRowView" , C# winforms 中的问题完全相同。 你不能设置selectedValue.ToString,因为它总是返回“System.Data.DataRowView”。 您需要将所选项目强制转换为 DataRowView,然后您才能从中获取值。

【讨论】:

  • hi colnames 是按组合框搜索,colvalues 是我的关键字的文本框
  • @user2520014 所以我确认问题是你不能设置 colnames.selectedValue.toString (好吧,我的回答有误,我写的是 ColValues 而不是 ColNames)。请参阅上面的链接进行转换并获取值。
  • 克里斯是对的。您在组合框绑定到的对象上调用 ToString(),它为您提供对象类型的字符串表示形式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2011-11-10
  • 2010-11-02
相关资源
最近更新 更多