简体   繁体   中英

how to filter a datagridview when a database is not being used

I am able get the contents of a csv file to read into DataGridView1, but I am having trouble filtering the data from textbox2. I tried different things I have found online, but nothing has worked so far. this is what i have:

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim fName As String = ""
    OpenFileDialog1.InitialDirectory = "C:\"
    OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv"
    OpenFileDialog1.FilterIndex = 2
    OpenFileDialog1.RestoreDirectory = True
    If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
        fName = OpenFileDialog1.FileName
    End If
    Me.TextBox1.Text = fName
    GetData(fName, DataGridView1, True)
End Sub
Private Sub GetData(ByVal Path As String, ByRef DG As DataGridView, Optional ByVal NoHeader As Boolean = False)
    Dim Fields() As String
    Dim Start As Integer = 1
    If NoHeader Then Start = 0
    If Not File.Exists(Path) Then
        Return
    End If
    Dim Lines() As String = File.ReadAllLines(Path)
    Lines(0) = Lines(0).Replace(Chr(34), "")
    Fields = Lines(0).Split(",")
    If NoHeader Then
        For I = 1 To Fields.Count - 1
            Fields(I) = Str(I)
        Next
    End If
    For Each Header As String In Fields
        DG.Columns.Add(Header, Header)
    Next
    For I = Start To Lines.Count - 1
        Lines(I) = Lines(I).Replace(Chr(34), "")
        Fields = Lines(I).Split(",")
        DG.Rows.Add(Fields)
    Next

End Sub

I just want to be able to filter say column 5 (no column headers in csv file) by typing something in textbox2. Any help would be greatly appreciated. Thank you

Don't add the values to a DGV , but instead use a DataTable then just make a query on that. Example considers you have a combobox for some filter choices - they are other ways to get this to depending on your needs. This method requires you to have headers though.

Private dt As New DataTable

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
 Dim fName As String = ""
 OpenFileDialog1.InitialDirectory = "C:\"
 OpenFileDialog1.Filter = "CSV Files (*.csv)|*.csv"
 OpenFileDialog1.FilterIndex = 2
 OpenFileDialog1.RestoreDirectory = True
 If (OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK) Then
    fName = OpenFileDialog1.FileName
 End If
 Me.TextBox1.Text = fName
 LoadData(fName)
 FilterData(combobox1.Text, "some column name")
End Sub

Private Sub LoadData(ByVal Path As String)
 Dim Fields() As String
 Dim Start As Integer = 1
 If NoHeader Then Start = 0
 If Not File.Exists(Path) Then
    Return
 End If
 Dim Lines() As String = File.ReadAllLines(Path)
 Lines(0) = Lines(0).Replace(Chr(34), "")
 Fields = Lines(0).Split(",")
 For I = 1 To Fields.Count - 1
     Fields(I) = Str(I)
 Next
 For Each Header As String In Fields
    dt.Columns.Add(Header, Header)
 Next
 For I = Start To Lines.Count - 1
    Lines(I) = Lines(I).Replace(Chr(34), "")
    Fields = Lines(I).Split(",")
    dt.Rows.Add(Fields)
 Next
End Sub

Private Sub FilterData(filter As String, columnName as string)
  Dim query = From dr As DataRow In dt.Rows Where dr(columnName).ToString = filter
  DGV.DataSource = query
End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM