2016-08-10 6 views
0

私はそれにExcelファイルをインポートするdatagridviewを持っています。私のExcelの列は、名前、ID、性別、学年、座席番号、恒久的なアドレス、一時的なアドレスと電話番号です。私がしたいのは、単一のテキストボックスを介してdatagridviewで同時に(マルチカラムフィルタ)すべての列をフィルタリングすることです。つまり、テキストボックスに1つの単語を入力すると、同時に列をフィルタリングする必要があります。ここでvb.netのテキストボックスを介して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 
+0

あなたはこれまで何をしていましたか、正確にどこにいらっしゃいましたか? –

+0

これまでのところ私は上記のコードでdatagridviewにexcelファイルをインポートしただけで、テキストボックス(txtfilter)もあります。私はテキストボックスのテキスト変更イベントをコーディングすることに固執しています。テキストボックスのテキスト変更イベントのコード。 – Addis

+0

あなたはこれを考え、よりよく説明する必要があります。行はフィルタリングされ、列はフィルタリングされません。性別をフィルタリングする基準は、Idの基準とほとんど同じではありません。 – Plutonix

答えて

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) 

あなたはbuタイプの問題に遭遇するかもしれませんt the documentationにはコンバージョンに関する情報があります。

関連する問題