listviewに追加した項目を表示するには?

解決


のびのびた  2004-09-02 22:51:12  No: 116139

どらえも〜ん…

というわけでお初です。よろしくお願いします。

DBの内容をlistview(.View = Details)を使って、表示しようとしているのですが、現在は空欄の行が追加した項目の個数だけ表示されてしまいます。

ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の追加についてはちゃんとできているような気がします。

一応ソースをのっけておきます。
    Private Sub btnSqlSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSqlSelect.Click
        Dim rdr As OleDbDataReader
        Dim lsv_item As New ListViewItem
        Dim i, j As Long

        'formに既にlsv_1というlistviewが用意してあります。
        me.lsv_1.Items.Clear()

        'sql文を実行して、結果を第二引数の「OleDbDataReader」に格納する関数です。
        Sql_Exec("select * from Company",rdr)

        If rdr.HasRows Then
            rdr.Read()
            me.lsv_1.Columns.Add("項番", -2, HorizontalAlignment.Left)
            For i = 0 To rdr.FieldCount - 1
                me.lsv_1.Columns.Add(rdr.GetName(i).ToString(), -2, HorizontalAlignment.Left)
            Next i

            Do
                lsv_item = New ListViewItem("item" & CStr(j), 0)
                For i = 0 To rdr.FieldCount - 1
                    If IsDBNull(rdr.GetValue(i)) Then
                        lsv_item.SubItems.Add("NULL")
                    Else
                        lsv_item.SubItems.Add(CStr(rdr.GetValue(i)))
                    End If
                Next i
                
                me.lsv_1.Items.Add(lsv_item)
                j = j + 1
            Loop While rdr.Read()
        Else
            MsgBox("レコードが選択されませんでした。")
        End If

        rdr.Close()

    End Sub

どうか、よろしくお願いします。


のびのびた  2004-09-02 23:03:15  No: 116140

環境を書き忘れていました。
Xp VS.NET2003 
です。よろしくお願いします。


特攻隊長まるるう  2004-09-03 01:53:50  No: 116141

>ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、
>これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の
>追加についてはちゃんとできているような気がします。
たぶん読んでる側には何のことか伝わってないと思うけど、ヘルプ見てたら
たまたま分かったので…w。
-2 が原因みたい。でも理由は不明のままですが。Me.Controls.Add された
後のイベントを1つ1つ検証していけば分かるんだろうけど…やる気が…(汗)
[VB.NET]
    Private Sub btnSqlSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSqlSelect.Click
        Dim i As Integer

        With Me.lsv_1.Columns
            For i = 0 To .Count - 1
                .Item(i).Width = 80
            Next
        End With
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CreateMyListView()
        With Me.lsv_1
            .Bounds = New Rectangle(New Point(10, 220), New Size(300, 200))
            .View = View.Details
            .Columns.Add("Item Column", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 2", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 3", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 4", -2, HorizontalAlignment.Center)
        End With
    End Sub

    Private Sub CreateMyListView()
        ' Create a new ListView control.
        Dim listView1 As New ListView
        With listView1
            .Bounds = New Rectangle(New Point(10, 10), New Size(300, 200))
            ' Set the view to show details.
            .View = View.Details
            ' Create columns for the items and subitems.
            .Columns.Add("Item Column", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 2", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 3", -2, HorizontalAlignment.Left)
            .Columns.Add("Column 4", -2, HorizontalAlignment.Center)
        End With
        Me.Controls.Add(listView1)
    End Sub 'CreateMyListView


特攻隊長まるるう  2004-09-03 02:05:31  No: 116142

あ、環境によって正常に動くかもしれないので現象も文で書いておきます。

ListView.ColumnHeaderCollection.Add メソッドあたりのヘルプに
サンプルがあるんですが、Me.Controls.Add で新しく追加した ListView
のカラムの設定は幅に -2 を設定するとカラムの幅が『列ヘッダーのテキスト
のサイズに自動的に変更』になってると思います。ところがデザイン画面で
設定した ListView にコードでカラムの追加をする場合に -2 を指定しても
幅が変わってくれないです。100 とか指定すると大丈夫です。

Win2000(Sp4)VS.NET2003


のびのびた  2004-09-03 02:41:32  No: 116143

特攻隊長まるるうさん、レスありがとうございます。
おかげで解決しました。

>>ただ、listview自体を変数として宣言し、同じようにlistviewにlistviewitemを追加して、
>>これをformに貼り付けると、ちゃんとDBの内容が表示されていることから、listviewへの項目の
>>追加についてはちゃんとできているような気がします。
>たぶん読んでる側には何のことか伝わってないと思うけど、ヘルプ見てたら
>たまたま分かったので…w。
すいません、わかりづらかったですね。
msdnのヘルプ(listviewとかで検索したとこ)にのってるプログラムだとそうなっています。

>-2 が原因みたい。でも理由は不明のままですが。Me.Controls.Add された
>後のイベントを1つ1つ検証していけば分かるんだろうけど…やる気が…(汗)
そのとおりでした。
widthの指定を「-2」ではなく、「80」で固定にしたら表示されました。
なぜかcolumnの幅が0になっていて、項目が見えてなかったというオチですね…。
なんともはかない…

これで先に進むことができます。
本当にありがとうございました。


のびのびた  2004-09-03 02:54:56  No: 116144

書き込みが重なってしまいました。
まるるうさん、たびたびありがとうございます。

>ListView.ColumnHeaderCollection.Add メソッドあたりのヘルプに
>サンプルがあるんですが、Me.Controls.Add で新しく追加した ListView
>のカラムの設定は幅に -2 を設定するとカラムの幅が『列ヘッダーのテキスト
>のサイズに自動的に変更』になってると思います。ところがデザイン画面で
>設定した ListView にコードでカラムの追加をする場合に -2 を指定しても
>幅が変わってくれないです。100 とか指定すると大丈夫です。
デザイン画面で設定したものに関しては何か特別な処理が必要かもしれないですね。
画面のリロードみたいなものがあるんでしょうか…。

またよろしくお願いします。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加