vb.net DatagridView使用searchbox搜索

时间:2017-03-01 01:34:28

标签: vb.net datagridview

我得到"找不到专栏[标签]"即使列存在于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

1 个答案:

答案 0 :(得分:0)

您尝试通过dbdataset1进行过滤,但这与您填充并绑定到网格的DataTable不同:

dataSet = New System.Data.DataSet
MyCommand.Fill(dataSet)
DataGridView1.DataSource = dataSet.Tables(0)

如您所见,那里没有dbdataset1的引用。

我建议您更改代码。首先,不要使用误导性的名字。例如,dbdataset1可能是DataSet类型变量的合理名称,但如果类型DataTable则不是。另一个例子,MyCommand可能是OleDbCommand变量的合理名称,但不是OleDbDataAdapter变量的合理名称。你的命名也应该保持一致,例如:如果您使用dataSetpath这两个好名字,那么为什么要使用MyConnectionMyCommand而不是connectionadapter或{{ 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