投稿者 凡人  (高校生) 投稿日時 2011/8/11 17:20:25
shu様、通りすがり様、ご回答ありがとうございました。

>shu様
>ListViewへのAddも1行毎に行うよりも一括で追加した方が速いと思います。

「一度ListViewItemCollectionに溜め込み、DataGridViewのように、溜め込んだデータをソースとして読み込む」という方法を考えついたのですが、ListViewItemCollectionのリファレンスがあまり見つからず、MSDNを探してもよくわかりませんでした。
他にListViewにItemを一括登録する方法、もしくはListViewItemCollectionからの登録方法は、ありますか?

以下、自分なりに作ってみたコードです。


    ''' <summary> 
    ''' CSVを入力します。 
    ''' </summary> 
    ''' <param name="FileName_str">ファイル名</param> 
    ''' <param name="Object_To">処理対象のコントロール</param> 

    Private Sub Input_CSV(ByVal FileName_str As StringByVal Object_To As ListView)
        'CSV入力 
        
        Dim Reader As IO.StreamReader

        '読み込み処理 
        Reader = New IO.StreamReader(FileName_str, System.Text.Encoding.GetEncoding("shift_jis"))
        Dim ReadedTxt() As String = Split(Reader.ReadToEnd, vbCrLf )
        Reader.Close()

        Dim ListViewItemArray(UBound(ReadedTxt) - 1) As ListView.ListViewItemCollection

        For i = 0 To UBound(ReadedTxt) - 1
            Dim str() As String = Split(ReadedTxt(i), ",")
            Dim Into As String() = {str(0), str(1)}
            ListViewItemArray(i).Add(New ListViewItem(Into))
        Next


        Object_To.BeginUpdate()
        'ListView追加処理 
        'ListViewItemCollectionから追加したい... 

        Object_To.EndUpdate()

    End Sub


なお、一行一行で追加していく場合には以下のコードを作成しました。

    ''' <summary> 
    ''' CSVを入力します。 
    ''' </summary> 
    ''' <param name="FileName_str">ファイル名</param> 
    ''' <param name="Object_To">処理対象のコントロール</param> 

    Private Sub Input_CSV(ByVal FileName_str As StringByVal Object_To As ListView)
        'CSV入力 
        
        Dim Reader As IO.StreamReader
        Dim ListItemArray As New ArrayList

        '読み込み処理 
        Reader = New IO.StreamReader(FileName_str, System.Text.Encoding.GetEncoding("shift_jis"))
        Dim ReadedTxt() As String = Split(Reader.ReadToEnd, vbCrLf )
        Reader.Close()

        For i = 0 To UBound(ReadedTxt) - 1
            Dim str() As String = Split(ReadedTxt(i), ",")
            Dim Into As String() = {str(0), str(1)}
            ListItemArray.Add(Into)
        Next


        Object_To.BeginUpdate()

        'ListView追加処理 

        For Each Into As String() In ListItemArray
            Object_To.Items.Add(New ListViewItem(Into))
        Next

        Object_To.EndUpdate()

    End Sub


よろしくお願いします。