繁体   English   中英

不使用数据库时如何过滤datagridview

[英]how to filter a datagridview when a database is not being used

我可以将csv文件的内容读取到DataGridView1中,但无法从textbox2过滤数据。 我尝试了网上发现的其他内容,但到目前为止没有任何效果。 这就是我所拥有的:

    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

我只希望能够通过在textbox2中键入内容来过滤第5列(csv文件中没有列标题)。 任何帮助将不胜感激。 谢谢

不要将值添加到DGV ,而是使用DataTable然后DGV进行查询。 示例认为您有一个用于某些过滤器选择的组合框-它们是根据您的需要使用的其他方法。 但是,此方法要求您具有标题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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