VB.net即时过滤datagrid

时间:2012-04-18 01:18:28

标签: vb.net search gridview csv filter

我是编程新手,尤其是VB,我正在尝试制作一个CSV阅读器,我可以使用一个搜索框过滤所有内容。以下是我用于将CSV文件加载到数据网格中的代码:

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SetupDataGridView()
        'Dim csvpath As String = Application.StartupPath & "\csvtest.csv"
        Dim csvpath As String = "c:\songs.csv"
        Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(csvpath)
            MyReader.TextFieldType = FileIO.FieldType.Delimited
            MyReader.SetDelimiters(",")
            Dim currentRow As String()
            While Not MyReader.EndOfData
                Application.DoEvents()
                Try
                    currentRow = MyReader.ReadFields()
                    With songsDataGridView
                        .ColumnCount = 2
                        Dim row As String() = New String() {currentRow(0), currentRow(1)}
                        .Rows.Add(row)
                    End With
                Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
                    MsgBox("Line " & ex.Message & _
                      "is not valid and will be skipped.")
                End Try

            End While
        End Using
    End Sub

这会将艺术家和标题加载到包含2列的gridview中,我可以单击列标题并进行排序。我现在要做的是使用我的搜索框(TextBox1),当我输入任何内容时,让不匹配的结果消失,只留下我的搜索词。我想要匹配艺术家或标题。然后,当您清除搜索框时,我想返回显示CSV文件的所有内容(原始gridview)。

我到处搜寻,找不到我想要的东西。很多数据库和SQL的东西,但不是我想要的数据网格。

有没有人可以提供任何帮助?另外,处理它的最佳方式是我处理它的方式吗?将所有条目加载到gridview需要几秒钟,所以我不知道最好先将它们加载到数组中并过滤它或它应该如何工作。有12,000首歌曲,所以需要一点点。这会是一个太大的阵列吗?

所以我想我有一个由两部分组成的问题:

  1. 我这样做是最有效/最好的方式吗?

  2. 如何根据需要过滤结果(无论是以某种方式通过数组在我的网格中)。编程的新手,也是。

  3. 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您可以尝试将数据存储在DataTable对象中,而不是直接将其嵌入DataGridView。然后将DataGridView的数据源与DataTable.DefaultView相关联。然后,您可以使用显示hereDefaultView.RowFilter过滤表格。此外,您可以使用TextBox.Changed事件根据输入的值应用过滤器。