我得到"找不到专栏[标签]"即使列存在于datagridview中,也会出错。这是我的代码。我正在尝试将excel数据加载到vb.net中的datagridview。
Public Class Form1
Dim dbdataset1 As New DataTable
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim dataSet As System.Data.DataSet
Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
Dim path As String = "C:\Users\jtb43661\Downloads\Master_Bulletin_Flow of Funds.xls"
MyConnection = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;")
MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Admin$]", MyConnection)
dataSet = New System.Data.DataSet
MyCommand.Fill(dataSet)
DataGridView1.DataSource = dataSet.Tables(0)
MyConnection.Close()
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End Sub
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Dim dv As New DataView(dbdataset1)
dv.RowFilter = String.Format("Labels Like '%{0}%'", TextBox1.Text)
DataGridView1.DataSource = dv
End Sub
End Class
答案 0 :(得分:0)
您尝试通过dbdataset1
进行过滤,但这与您填充并绑定到网格的DataTable
不同:
dataSet = New System.Data.DataSet
MyCommand.Fill(dataSet)
DataGridView1.DataSource = dataSet.Tables(0)
如您所见,那里没有dbdataset1
的引用。
我建议您更改代码。首先,不要使用误导性的名字。例如,dbdataset1
可能是DataSet
类型变量的合理名称,但如果类型DataTable
则不是。另一个例子,MyCommand
可能是OleDbCommand
变量的合理名称,但不是OleDbDataAdapter
变量的合理名称。你的命名也应该保持一致,例如:如果您使用dataSet
和path
这两个好名字,那么为什么要使用MyConnection
和MyCommand
而不是connection
和adapter
或{{ 1}}?
更重要的是,您应该删除dataAdapter
字段和本地DataTable
变量,并且不要反复创建新的DataSet
对象。在设计器中向表单添加DataView
,然后绑定并过滤该表单。这样:
BindingSource
会变成这样:
dataSet = New System.Data.DataSet
MyCommand.Fill(dataSet)
DataGridView1.DataSource = dataSet.Tables(0)
然后你会这样过滤:
Dim table As New DataTable
adapter.Fill(table)
BindingSource1.DataSource = table
DataGridView1.DataSource = BindingSource1
以下是我在下面的评论中建议您使用BindingSource1.Filter = String.Format("Labels LIKE '%{0}%'", TextBox1.Text)
的方式:
Timer