通过vb.net中的文本框从excel导入后过滤datagridview

时间:2016-08-10 11:02:07

标签: c# vb.net excel datagridview

我有一个datagridview,我将excel文件导入其中。我的excel列是姓名,ID,性别,等级,座位号,永久地址,临时地址和电话号码。我想要的是通过单个文本框在datagridview中同时过滤所有列(多列过滤器)。即,当我在文本框中键入单个单词时,我希望它同时过滤列。

以下是我将excel导入datagridview的代码....

Dim cn As New OleDbConnection
Dim cm As New OleDbCommand
Dim da As OleDbDataAdapter
Dim dt As New DataTable
Private Excel03ConString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'"
Private Excel07ConString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR={1}'"
Private Sub btnSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelect.Click
OpenFileDialog1.Title = "Open Internship Excel Files"

OpenFileDialog1.ShowDialog()
End Sub
Private Sub OpenFileDialog1_FileOk(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
        Dim filePath As String = OpenFileDialog1.FileName
        Dim extension As String =
        Path.GetExtension(filePath)
        Dim header As String = If(rbHeaderYes.Checked, "YES", "NO")
        Dim conStr As String, sheetName As String
        conStr = String.Empty
        Select Case extension
            Case ".xls"
                'Excel 97-03
                conStr = String.Format(Excel03ConString, filePath, header)
                Exit Select
            Case ".xlsx"
                'Excel 07
                conStr = String.Format(Excel07ConString, filePath, header)
                Exit Select
        End Select
        'Get the name of the First Sheet.
        Using con As New OleDbConnection(conStr)
            Using cmd As New OleDbCommand()
                cmd.Connection = con
                con.Open()
                Dim dtExcelSchema As DataTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
                sheetName = dtExcelSchema.Rows(0)("TABLE_NAME").ToString()
                con.Close()
            End Using
        End Using
        'Read Data from the First Sheet.
        Using con As New OleDbConnection(conStr)
            Using cmd As New OleDbCommand()
                Using oda As New OleDbDataAdapter()
                    Dim dt As New DataTable()
                    cmd.CommandText = (Convert.ToString("SELECT * From [") & sheetName) + "]"
                    cmd.Connection = con
                    con.Open()
                    oda.SelectCommand = cmd
                    oda.Fill(dt)
                    con.Close()
                    'Populate DataGridView.
                    DataGridView1.DataSource = dt
                End Using
            End Using
        End Using
    End Sub

1 个答案:

答案 0 :(得分:0)

您可以像这样应用行过滤器:(来自Filtering DataGridView without changing datasource

CType(DataGridView1.DataSource,DataTable).DefaultView.RowFilter = MyQueryCriteria

根据您的标准,您需要以下内容:

Dim MyQueryCriteria = String.Format("ID like '%{0}%' OR NAME like '%{0}%' OR ...", MyTextBox.Text)

您可能会遇到类型问题,但the documentation有转化信息。