0

私はプログラミング、特に 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 列のグリッドビューに読み込まれ、列ヘッダーをクリックして並べ替えることができます。今やりたいことは、検索ボックス (TextBox1) を使用して、何かを入力すると、一致しない結果が消えて、検索語だけが残るようにすることです。アーティストかタイトルのどちらかに合わせたい。次に、検索ボックスをクリアすると、CSV ファイル (元のグリッドビュー) のすべてのコンテンツを表示するように戻りたいと思います。

どこでも検索しましたが、欲しいものを正確に見つけることができません。多くのデータベースと SQL のものがありますが、データグリッドに必要なものではありません。

誰かに役立つものはありますか?また、これを処理する最善の方法は、私が処理している方法ですか? すべてのエントリをグリッドビューにロードするのに数秒かかるため、最初にそれらを配列にロードしてそれをフィルタリングする方が良いかどうか、またはどのように機能するかがわかりませんでした。12,000曲あるので少し時間がかかります。それは配列が大きすぎますか?

だから私は2つの部分からなる質問があると思います:

  1. 私はそれを最も効率的/最良の方法で行っていますか?

  2. オンデマンドで結果をフィルタリングするにはどうすればよいですか (何らかの方法で配列を介してグリッドにあるかどうか)。プログラミングも超初心者。

手伝ってくれてどうもありがとう!

4

1 に答える 1

1

DataTableにデータを直接埋め込むのではなく、オブジェクトにデータを格納してみてくださいDataGridViewDataGridView次に、のデータ ソースを にリンクしますDataTable.DefaultViewDefaultView.RowFilter次に、ここに示すように使用してテーブルをフィルタリングできます。また、イベントを利用してTextBox.Changed、入力した値に基づいてフィルターを適用することもできます。

于 2012-04-18T01:24:34.420 に答える