2016-08-01 3 views
2

Ich habe eine Datagridview, die ich importieren eine Excel-Datei. Meine Excel-Spalten sind Name, ID, Geschlecht, Klasse, Sitz Nr. Was ich will ist Filter alle die Spalten (mehrspaltiger Filter) in der Datagridview mit Ausnahme von Name und ID über ein Textfeld. Wenn ich ein einzelnes Wort in das Textfeld eintippe, möchte ich, dass die Spalten Geschlecht, Note und Platz nicht gleichzeitig gefiltert werden. hier ist der Excel-Import-Code in den Datagridview ....Wie filtere ich mehrere Spalten in Datagridview exportierte von Excel in VB.NET

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

Was haben Sie getan, um die Suchfunktionalität zu implementieren? – ganesshkumar

+0

Sie können die Datentabelle verwenden. Wählen Sie ('Ihre Bedingung einfügen') für die Filterung mehrerer Zeilen – Leprechaun

Antwort

1

Sie Ihre Datentabelle an eine Binding binden sollen, die Sie im Designer hinzufügen würden, und dann die Bindung an das Netz. Sie können die Daten dann filtern, indem Sie die Eigenschaft Filter der BindingSource festlegen. Es ist im Grunde eine SQL WHERE-Klausel, so dass Sie wie in SQL die Operatoren AND und OR verwenden können, um mehrere Kriterien zu kombinieren, z.

Beachten Sie, dass Sie LIKE nur für Textspalten verwenden können, nicht für Zahlen oder Daten oder irgendetwas anderes.

+0

Wie kann ich es tun, ohne eine bindende Quelle zu verwenden? – addis

+0

Ich habe den Code bearbeitet und einen fehlenden Verweis auf die Eigenschaft 'Filter' hinzugefügt. – jmcilhinney

+0

Was genau haben Sie gegen eine BindingSource? Es gibt keinen guten Grund, es nicht zu tun. Wenn Sie entschlossen sind, einen nicht ohne Grund zu verwenden, können Sie die 'DefaultView.RowFilter' Eigenschaft der' DataTable' anstelle der 'Filter' Eigenschaft der' BindiongSource' festlegen. – jmcilhinney

Verwandte Themen